Вопрос: Если я знаю номер PID процесса, как я могу получить его имя?


Если у меня есть номер PID для процесса (на машине UNIX), как я могу узнать имя связанного с ним процесса?

Что мне нужно сделать?


202
2017-08-17 07:12


Источник


Вы можете использовать ps или ls -l /proc/$PID/exe - Eddy_Em
@Eddy_Em, который даст вам исполняемый файл, который не всегда является именем процесса. Кроме того, это не переносится ... - derobert
ps -fp PID покажет полную команду - Temak


Ответы:


На всех POSIX-совместимых системах и с Linux вы можете использовать ps:

ps -p 1337 -o comm=

Здесь процесс выбирается с помощью PID с -p, -o option указывает формат вывода, comm что означает имя команды.

Смотрите также: ps - Базовые спецификации Open Group, выпуск 6


219
2017-08-17 08:21



comm, кажется, усекает команду до 15 символов. С помощью command вместо этого исправляет это. - Nemo
[Ubuntu 14.04.4 LTS] $ ps -p 1 -o comm=  в этом $ ps -p 1 -o command=  / SBIN / INIT; это означает, что это не около 15 символов, может быть, просто имя двоичного файла по сравнению с его полным путем. - OmarOthman
На самом деле, comm дает имя двоичного файла и command возвращает аргумент 0 - robbie0630


Вы можете найти имя процесса или команду, используемую идентификатором процесса или pid из

/proc/pid/cmdline

при выполнении

cat /proc/pid/cmdline

Здесь pid - это pid, для которого вы хотите найти имя
Для exmaple:

 # ps aux

   ................
   ................
   user  2480  0.0  1.2 119100 12728 pts/0  Sl   22:42   0:01 gnome-terminal
   ................
   ................

Чтобы найти имя процесса, используемое pid 2480, вы можете использовать

# cat /proc/2480/cmdline 

 gnome-terminal

37
2017-08-17 08:04



Будьте осторожны: OP упоминает UNIX. Не все UNIX реализуют Plan 9 как файл, зависящий от процесса. Обычно ваш ответ относится только к Linux. - slhck
Хотя это правда, они отметили вопрос «linux». Любой, кто использует ОС UNIX, отличную от Linux, будет весьма привык к тому, чтобы изменять ответы в соответствии с их потребностями - Andrew White


Чтобы получить путь к программе с помощью определенного pid, вы можете использовать:

ps ax|egrep "^ [PID]"

альтернативно вы можете использовать:

ps -a [PID]

enter image description here


12
2018-04-18 02:16



ps -a список всех процессов, связанных с терминалом, он не принимает никаких данных. - Michael Lee
@MichaelLee Я думаю, это зависит от ps версии, на procps version 3.2.7 работает отлично. - Pedro Lobito


# ls -la /proc/ID_GOES_HERE/exe

Пример:

# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai  5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop

7
2018-05-06 00:14



Это прекрасно. - jayarjo
Вероятно, лучше: readlink /proc/1337/exe, readlink - печатать разрешенные символические ссылки или имена канонических файлов. - Pablo Bianchi


Вы можете использовать pmap. Я ищу PID 6649. И отрезаю дополнительные детали процесса.

$ pmap 6649 | head -1
6649:   /usr/lib64/firefox/firefox

5
2018-05-27 04:28





Вы также можете использовать awk в сочетании с ps

ps aux | awk '$2 == PID number for a process  { print $0 }'

пример:

root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root         1  0.0  0.2  24476  2436 ?        Ss   15:38   0:01 /sbin/init    

для печати HEAD LINE вы можете использовать

 ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'

                 (or) 

 ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'


root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.2  24476  2436 ?        Ss   15:38   0:01 /sbin/init

3
2017-08-17 09:32



Это нестабильно, так как он также выбирает процессы, которые включают число в любом месте своей команды. Пытаться ps ax | grep 1 и посмотрите, действительно ли это возвращает init процесс, например. (В моем случае он возвращает 119 строк - нежелательно.) - slhck
@slhck Изменен ответ ... спасибо за информацию .. ps -p 1 -o comm = это лучший вариант для этого вопроса. - Gangadhar
Нам не нужны два прогона, чтобы сохранить заголовки, вместо этого используйте ps aux | awk 'NR==1 || $2==PID' - и не нужно говорить {print $0} потому что это значение по умолчанию. Но, как вы прокомментировали, -p В любом случае, лучше. - dave_thompson_085


Симметрично Ответ slhck, но полагаясь на операции с файлами, а не на вызовы команд:

MYPID=1
cat "/proc/$MYPID/comm"

2
2017-08-30 23:31



[Ubuntu 14.04.4 LTS] cat /proc/1/comm=> init, not / sbin / init. Его ответ включает более длинную версию. Но +1 в любом случае. - OmarOthman