Linux узнать владельца процесса

Содержание
  1. Вывод информации о процессе
  2. 2 ответа 2
  3. Как узнать владельца процесса?
  4. Re: Как узнать владельца процесса?
  5. Re: Как узнать владельца процесса?
  6. Re: Как узнать владельца процесса?
  7. Re: Как узнать владельца процесса?
  8. Re: Как узнать владельца процесса?
  9. Re: Как узнать владельца процесса?
  10. Re: Как узнать владельца процесса?
  11. Re: Как узнать владельца процесса?
  12. Re: Как узнать владельца процесса?
  13. Re: Как узнать владельца процесса?
  14. Re: Как узнать владельца процесса?
  15. Re: Как узнать владельца процесса?
  16. Re: Как узнать владельца процесса?
  17. Re: Как узнать владельца процесса?
  18. Re: Как узнать владельца процесса?
  19. Re: Как узнать владельца процесса?
  20. Re: Как узнать владельца процесса?
  21. Re: Как узнать владельца процесса?
  22. Re: Как узнать владельца процесса?
  23. Re: Как узнать владельца процесса?
  24. How to find PID's user name in Linux?
  25. 6 Answers 6
  26. Нужно знать: утилита lsof в Linux
  27. Как узнать, кто использует файл в Linux?

Вывод информации о процессе

Допустим есть процесс firefox(pid 5059) Как вывести с помощью ps владельца этого процесса, аргументы с которыми был запущен этот процесс, группу владельца этого процесса и т.д. ps -eo user, ? , ? | grep firefox

2 ответа 2

владельца этого процесса, аргументы с которыми был запущен этот процесс, группу владельца этого процесса

для процесса номер 5059:

$ ps -o user,args,group -p 5059 

для процессов, выполняющих файл с именем firefox:

$ ps -o user,args,group -C firefox 

см. секцию STANDARD FORMAT SPECIFIERS в man ps .

Как вариант, если есть права root.

~# find /proc/5059 -type f -print0 2>/dev/null | xargs -0 cat 

Выведет всю «сырую» информацию о процессе.

Покажет какая команда была запущена в этом процессе, с полным путем до неё.

~# find /proc/9* -type f -print0 2>/dev/null | xargs -0 grep "firefox" 

Пройтись по всем процессам и найти файлы, где фигурирует firefox (активное использование философии UNIX).

Утилита ps формирует вывод как раз из псевдо файловой системы /proc.

~# strace ps 2>&1 | grep "open" | grep -oP "(?<=open\(\")/[a-z]+/" | sort | uniq -c | sort -nr 584 /proc/ 9 /usr/ 1 /sys/ 1 /etc/ 

Часто использую в рабочем процессе.

~$ ps aux | grep [f]irefox sharlat+ 2736 1.0 4.5 3659672 735104 tty2 Sl+ Jun29 89:31 /usr/lib64/firefox/firefox To see every process on the system using BSD syntax: ps ax ps axu 

- grep [f]irefox - хак, убрать из поиска процесс grep.

Источник

Как узнать владельца процесса?

Какой самый простой способ узнать из программы на C запущен ли экзешник с заданным именем и от имени какого пользователя он запущен? Помимо анализа /proc/*/exe для поиска программы с последующим поиском HOME=. в /proc/. /environ

Re: Как узнать владельца процесса?

Re: Как узнать владельца процесса?

Спасибо, но это даст владельца текущего процесса. А мне, наоборот, нужно узнать не запущен ли уже другой экземпляр программы от имени того же пользователя.

Re: Как узнать владельца процесса?

> от имени того же пользователя

Re: Как узнать владельца процесса?

Re: Как узнать владельца процесса?

В системных манах такой функции нет, можно ссылку? И где взять pid?

Re: Как узнать владельца процесса?

>Спасибо, но это даст владельца текущего процесса. А мне, наоборот, нужно узнать не запущен ли уже другой экземпляр программы от имени того же пользователя.

Неправильно понял вопрос, извиняюсь. Тогда всё-таки проще будет парсить proc. Хотя можно было бы, наверное, заморочиться мьютексами %)

Читайте также:  Virtualbox линукс как поставить

Re: Как узнать владельца процесса?

> Тогда всё-таки проще будет парсить proc.

Как узнать владельца процесса менее запутанным способом, чем поиском в /proc/. /environ "\000HOME=$HOME\000" ?

Re: Как узнать владельца процесса?

Re: Как узнать владельца процесса?

> Как узнать владельца процесса менее запутанным способом, чем поиском в /proc/. /environ "\000HOME=$HOME\000" ?

Владелец псевдофайлов в /proc/$PID и есть владелец процесса. Так что stat(2) на соответствующую директорию в /proc и всё.

Re: Как узнать владельца процесса?

Спасибо. Тогда уж сразу popen + (ps | grep имяфайла). Сама-то ps каким образом этот список получает?

Re: Как узнать владельца процесса?

> Владелец псевдофайлов в /proc/$PID и есть владелец процесса. Так что stat(2) на соответствующую директорию в /proc и всё.

Спасибо. До 1-го я уже дошёл. За stat спасибо.

Re: Как узнать владельца процесса?

>Спасибо. Тогда уж сразу popen + (ps | grep имяфайла). Сама-то ps каким образом этот список получает?

Да в принципе ничего страшного бы не случилось, если б владельца получал таким образом, ведь ps в любой дистр линукса входит:

ps --pid --format user --no-headers

Но более правильный способ уже Иван подсказал, опередив меня. 🙂

Re: Как узнать владельца процесса?

Есть ли процесс pid и принадлежит ли он тому же пользователю, который kill запустил. Ответ был не на топик, а на ту фразу, которую я процитировал.

Re: Как узнать владельца процесса?

> Есть ли процесс pid и принадлежит ли он тому же пользователю, который kill запустил.

Спасибо. Просто из 1-го поста это было непонятно. И я правильно понимаю, что этот трюк не сработает, если запускать программу от имени суперпользователя?

Re: Как узнать владельца процесса?

> И я правильно понимаю, что этот трюк не сработает, если запускать программу от имени суперпользователя?

Не сработает, поэтому надо сначала geteuid() глянуть. Боюсь, единственный портабельный способ выяснять подобные вещи - запускать ps и парсить вывод.

Re: Как узнать владельца процесса?

> Боюсь, единственный портабельный способ выяснять подобные вещи - запускать ps и парсить вывод.

Вообще-то, вполне можно обойтись и без запуска внешних приложений: выдрать кусок кода из ps и вставить в свою программу.

Я точно так же делал, когда возникла необходимость при запуске процесса убивать одноименные (чтобы не висело несколько демонов). Выдрал кусочек из pkill'а и оформил как отдельную функцию. Всего на полстраницы кода получилось. Здесь можно поступить также.

Re: Как узнать владельца процесса?

в каждой системе своя реализация ps. Как и формат вывода.

Re: Как узнать владельца процесса?

>Вообще-то, вполне можно обойтись и без запуска внешних приложений: выдрать кусок кода из ps и вставить в свою программу.

Re: Как узнать владельца процесса?

> в каждой системе своя реализация ps. Как и формат вывода.

Re: Как узнать владельца процесса?

да, но разве веток ядер сильно много? :). Везде ветка 2.6.x. Хотя хрен знает ядрописателей, они могут и такое сломать если захотят.

Источник

How to find PID's user name in Linux?

Can you help me to find the PID's user name? Sometimes my server has high load. When I run top -c , I cannot even find the owner of a process which is causing load on the server.

We were experiencing server load issue due to bulk php process, so that i had this question, we can then find them using 'lsof -p xxxx'.

Читайте также:  Профиль qt make install linux

6 Answers 6

I'm surprised nobody has put this up yet:

Try the -p option of the ps command.

For instance, if you have PID 1234 , run:

The -u was added to include the username in the output.

You can then use grep or awk , etc. to extract the info you want.

You were a tick faster than me. You're waking up earlier? Depending on the Linux distrbution, ps u 1234 (Debian) or just ps 1234 (Android with Busybox) also works.

This works nicely with pgrep when you only have the process name (not the PID) or when you want to see the owners of multiple processes with a similar name: ps -u -p $(pgrep yourProcessName)

/proc/processID/status will have the information about user's ID which you can use to find the username.

uid=$(awk '/^Uid:/' /proc/YOUR_PROCESS_ID/status) getent passwd "$uid" | awk -F: '' 

Replace YOUR_PROCESS_ID with your process ID number.

The best answer, since it's the fastest, especially if changed to : getent passwd $(< /proc/"$uid"/loginuid) | sed 's/\:.*$//'

Get only username from a PID:

PID=136323 USERNAME="$( ps -o uname= -p "$" )" 

You can also combine it with a pgrep . In this example we show all usernames executing some .php file:

pgrep -f '\.php' | xargs -r ps -o uname= -p | sort -u 

Find only one username running a certain unique process:

USERNAME mt24"> 
)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter " data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f4.0%2f" data-se-share-sheet-license-name="CC BY-SA 4.0" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
)">edited Sep 25, 2018 at 0:30
answered Sep 25, 2018 at 0:21
Add a comment |
3

I think the shortest way is:

id -nu 

The /proc//loginuid file has the uid number of the user running the process; id -nu reads uid from stdin and returns a user name.

Источник

Нужно знать: утилита lsof в Linux

img

В этой статье мы объясним, как узнать, кто использует тот или иной файл в Linux. Это поможет вам узнать системного пользователя или процесс, который использует открытый файл.

Как узнать, кто использует файл в Linux?

утилита lsof в Linux

Мы можем использовать команду lsof (которая является аббревиатурой от List Of Opened Files), чтобы узнать, использует ли кто-то файл, и если да, то кто. Он читает память ядра в поиске открытых файлов и перечисляет все открытые файлы. В этом случае открытый файл может быть обычным файлом, каталогом, специальным файлом блока, специальным файлом символов, потоком, сетевым файлом и многими другими, поскольку в Linux все является файлом.

Lsof используется в файловой системе, чтобы определить, кто использует какие-либо файлы в этой файловой системе. Вы можете запустить команду lsof в файловой системе Linux, и выходные данные идентифицируют владельца и информацию о процессах для процессов, использующих файл, как показано в следующих выходных данных.

Список всех открытых файлов в Linux

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1480 merionet 0r CHR 1,3 0t0 6 /dev/null sh 1501 merionet 0r CHR 1,3 0t0 6 /dev/null sh 1501 merionet 1w CHR 1,3 0t0 6 /dev/null dbus-daem 1530 merionet 0u CHR 1,3 0t0 6 /dev/null xfce4-ses 1603 merionet 0r CHR 1,3 0t0 6 /dev/null xfce4-ses 1603 merionet 1w CHR 1,3 0t0 6 /dev/null at-spi-bu 1604 merionet 0r CHR 1,3 0t0 6 /dev/null dbus-daem 1609 merionet 0u CHR 1,3 0t0 6 /dev/null at-spi2-r 1611 merionet 0u CHR 1,3 0t0 6 /dev/null xfconfd 1615 merionet 0u CHR 1,3 0t0 6 /dev/null xfwm4 1624 merionet 0r CHR 1,3 0t0 6 /dev/null xfwm4 1624 merionet 1w CHR 1,3 0t0 6 /dev/null xfce4-pan 1628 merionet 0r CHR 1,3 0t0 6 /dev/null xfce4-pan 1628 merionet 1w CHR 1,3 0t0 6 /dev/null Thunar 1630 merionet 0r CHR 1,3 0t0 6 /dev/null Thunar 1630 merionet 1w CHR 1,3 0t0 6 /dev/null xfdesktop 1632 merionet 0r CHR 1,3 0t0 6 /dev/null xfdesktop 1632 merionet 1w CHR 1,3 0t0 6 /dev/null .

Чтобы вывести список файлов, открытых для конкретного пользователя, выполните следующую команду: замените merionet вашим именем пользователя.

Список файлов, открытых пользователем:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1480 merionet cwd DIR 8,3 4096 2 / systemd 1480 merionet rtd DIR 8,3 4096 2 / systemd 1480 merionet txt REG 8,3 1595792 3147496 /lib/systemd/systemd systemd 1480 merionet mem REG 8,3 1700792 3150525 /lib/x86_64-linux-gnu/libm-2.27.so systemd 1480 merionet mem REG 8,3 121016 3146329 /lib/x86_64-linux-gnu/libudev.so.1.6.9 systemd 1480 merionet mem REG 8,3 84032 3150503 /lib/x86_64-linux-gnu/libgpg-error.so.0.22.0 systemd 1480 merionet mem REG 8,3 43304 3150514 /lib/x86_64-linux-gnu/libjson-c.so.3.0.1 systemd 1480 merionet mem REG 8,3 34872 2497970 /usr/lib/x86_64-linux-gnu/libargon2.so.0 systemd 1480 merionet mem REG 8,3 432640 3150484 /lib/x86_64-linux-gnu/libdevmapper.so.1.02.1 systemd 1480 merionet mem REG 8,3 18680 3150450 /lib/x86_64-linux-gnu/libattr.so.1.1.0 systemd 1480 merionet mem REG 8,3 18712 3150465 /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0 systemd 1480 merionet mem REG 8,3 27112 3150489 /lib/x86_64-linux-gnu/libuuid.so.1.3.0 systemd 1480 merionet mem REG 8,3 14560 3150485 /lib/x86_64-linux-gnu/libdl-2.27.so .

Еще одно важное использование lsof - выяснение процесса прослушивания определенного порта. Например, определите процесс, прослушивающий порт 80, с помощью следующей команды.

Процессы, прослушивающие порт:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME httpd 903 root 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 1320 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 1481 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 1482 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 1493 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 1763 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 2027 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 2029 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 2044 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 3199 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN) httpd 3201 apache 4u IPv6 20222 0t0 TCP *:http (LISTEN)

Примечание: поскольку lsof читает память ядра при поиске открытых файлов, быстрые изменения в памяти ядра могут привести к непредсказуемым результатам. Это один из основных недостатков использования команды lsof.

Для получения дополнительной информации, смотрите справку lsof:

На этом все! В этой статье мы объяснили, как узнать, кто использует тот или иной файл в Linux.

Источник

Оцените статью
Adblock
detector