- Вывод информации о процессе
- 2 ответа 2
- Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- Re: Как узнать владельца процесса?
- How to find PID's user name in Linux?
- 6 Answers 6
- Нужно знать: утилита lsof в Linux
- Как узнать, кто использует файл в 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. Хотя можно было бы, наверное, заморочиться мьютексами %)
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'.
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 Jeroen Vermeulen - MageHostJeroen Vermeulen - MageHost 988 8 silver badges 9 bronze badges