Перейти к содержимому

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

219

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

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

446 135 просмотров
AndreaNobili спросил 13 лет назад
A 2 357

10 ответов

237
Принятый ответ

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

ps -p 1337 -o comm= 

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

См. Также: ps- Базовые спецификации Open Group Issue 6

Похоже, что comm обрезает команду до 15 символов. Использование command вместо этого исправляет это.

Nemo · 12 лет назад · 22

[Ubuntu 14.04.4 LTS] $ ps -p 1 -o comm = init $ ps -p 1 -o command = / sbin / init; это означает, что это не около 15 символов, может быть, просто имя двоичного файла против его полного пути.

OmarOthman · 10 лет назад · 1

На самом деле, comm дает имя двоичного файла, а command возвращает аргумент 0

robbie0630 · 9 лет назад · 2
slhck ответил 13 лет назад
S 157 904
40

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

/proc/pid/cmdline 

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

cat /proc/pid/cmdline 

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

 # 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 

Будьте осторожны: в OP упоминается UNIX. Не все UNIX-ы реализуют Plan 9 как файл, специфичный для процесса. Ваш ответ обычно относится только к Linux.

slhck · 13 лет назад · 13

Хотя это правда, они отметили вопрос «linux». Любой, кто использует ОС UNIX не на основе Linux, будет достаточно привыкать к тому, чтобы изменять ответы в соответствии со своими потребностями.

Andrew White · 9 лет назад · 1
Stormvirux ответил 13 лет назад
S 707
13

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

ps ax|egrep "^ [PID]" 

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

ps -a [PID] 

ps -a выводит список всех процессов, связанных с терминалом, он не требует ввода.

Michael Lee · 10 лет назад · 1

@MichaelLee Я полагаю, это зависит от версии ps, от procps version 3.2.7 работает нормально.

Pedro Lobito · 9 лет назад · 0
Pedro Lobito ответил 11 лет назад
P 487
7
# ls -la /proc/ID_GOES_HERE/exe 

Example:

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

Этот идеален.

jayarjo · 9 лет назад · 0

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

Pablo Bianchi · 8 лет назад · 0
Carlos H. M. Moreira ответил 10 лет назад
C 71
6

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

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

Эта команда помогла мне больше, чем мне нужно, у меня есть полная строка процесса, который начался. Учитывая Java-процесс, с помощью команды ps вы увидите только java, но остальные переданные параметры будут полностью отображены с помощью pmap.

Mincă Daniel Andrei · 7 лет назад · 0
Mike Studer ответил 9 лет назад
M 61
3

Вы также можете использовать 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 

Это нестабильно, так как он также выбирает процессы, которые включают число в любом месте своей команды. Попробуй ps ax | grep 1 и посмотрите, действительно ли он возвращает процесс init, например. (В моем случае возвращает 119 строк - не желательно.)

slhck · 13 лет назад · 2

@slhck Модифицировал ответ ... спасибо за информацию .. ** ps -p 1 -o comm = ** - лучший вариант для этого вопроса.

Gangadhar · 13 лет назад · 1

Нам не нужны два запуска для сохранения заголовков, вместо этого используйте ps aux | awk 'NR == 1 || $ 2 == PID' - и не нужно говорить ``, потому что это по умолчанию. Но, как вы прокомментировали, -p лучше в любом случае.

dave_thompson_085 · 10 лет назад · 0
Gangadhar ответил 13 лет назад
G 301
2

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

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

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

OmarOthman · 10 лет назад · 0
ThorSummoner ответил 10 лет назад
T 521
2

Удивительно, но никто не упомянул опцию -f (полная команда) для ps. Мне нравится использовать его с -e (все) и направлять результаты в grep, чтобы я мог сузить область поиска.

ps -ef | grep <PID> 

Это также очень полезно для просмотра полных команд, выполняемых кем-то, которые занимают много ресурсов в вашей системе. Это покажет вам параметры и аргументы, переданные команде.

Не работает на BSD (возможно, включая MacOSX? Я не уверен). Даже если доступно -e -f, grep может выдавать много ложных совпадений, например, grep 33 включает pid = 933 или 339, ppid = 33 или 933 или 339, время использования составляет 33 секунды или 33 минуты, или имя программы или аргумент, содержащий 33 - включая сам grep. Все (AFAIK) ps имеют -p, поэтому просто ps -fp 33.

dave_thompson_085 · 10 лет назад · 2
jdelaporte ответил 10 лет назад
J 106
0

Я считаю, что самый простой способ с помощью следующей команды:

ps -awxs | grep pid 

Помимо того, что он очень неэффективен по сравнению с ps -p $ , он поднимет множество ложных срабатываний - включая сам grep.

Toby Speight · 9 лет назад · 0
user666282 ответил 9 лет назад
U 11
0

сделал простой скрипт для поиска PID и использования в скриптах bash ...
используйте с осторожностью !!

Снимок экрана: http://pastebin.com/Cm9YH67U
Скриншот



Андре

André Verwijs ответил 9 лет назад
A 141