Если у меня есть номер PID для процесса (на компьютере с UNIX), как я могу узнать имя связанного с ним процесса?
Что мне нужно сделать?
ps -fp PID
покажет полную команду
Если у меня есть номер PID для процесса (на компьютере с UNIX), как я могу узнать имя связанного с ним процесса?
Что мне нужно сделать?
ps -fp PID
покажет полную команду
Ответы:
На всех POSIX-совместимых системах и в Linux вы можете использовать ps
:
ps -p 1337 -o comm=
Здесь процесс выбирается по его PID с -p
. -o
Параметр определяет формат вывода, что comm
означает имя команды.
См. Также: ps
- Базовые спецификации Open Group Issue 6
command
вместо этого исправляет это.
$ ps -p 1 -o comm=
init $ ps -p 1 -o command=
/ sbin / init; это означает, что это не около 15 символов, может быть, просто имя двоичного файла и его полный путь.
comm
дает бинарной имя и command
возвращает аргумент 0
Вы можете найти имя процесса или команду, используемую идентификатором процесса или 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
Чтобы получить путь к программе, используя определенный pid, вы можете использовать:
ps ax|egrep "^ [PID]"
В качестве альтернативы вы можете использовать:
ps -a [PID]
ps -a
перечислить все процессы, которые связаны с терминалом, он не требует ввода.
ps
версии, procps version 3.2.7
работает нормально.
# 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
readlink /proc/1337/exe
. readlink - печатать разрешенные символические ссылки или канонические имена файлов.
Вы можете использовать pmap. Я ищу PID 6649. И обрезаю лишние детали процесса.
$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
ps
команды все, что вы увидите, просто java
, но остальные переданные параметры будут отображаться полностью с pmap
.
Вы также можете использовать 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 строк - не желательно.)
ps aux | awk 'NR==1 || $2==PID'
- и не нужно говорить, {print $0}
потому что это по умолчанию. Но, как вы прокомментировали, -p
все равно лучше.
Схоже с ответом slhck , но полагаясь на файловые операции, а не на вызовы команд:
MYPID=1
cat "/proc/$MYPID/comm"
cat /proc/1/comm
=> init, а не / sbin / init. В его ответ включена более длинная версия. Но +1 в любом случае.
Удивительно, но никто не упомянул опцию -f (полная команда) для ps. Мне нравится использовать его с -e (все) и направлять результаты в grep, чтобы я мог сузить область поиска.
ps -ef | grep <PID>
Это также очень полезно для просмотра полных команд, выполняемых кем-то, которые занимают много ресурсов в вашей системе. Это покажет вам параметры и аргументы, переданные команде.
-e -f
это возможно, grep
может выдавать много ложных совпадений, например, grep 33
pid = 933 или 339, ppid = 33 или 933 или 339, время использования 33 секунд или 33 минуты, или имя программы или аргумент, содержащий 33 - включая grep
саму себя. Все (AFAIK) ps
есть -p
, так что просто ps -fp 33
.
Я считаю самый простой способ с помощью следующей команды:
ps -awxs | grep pid
ps -p${pid}
, он может поднять множество ложных срабатываний - включая grep
сам по себе.
сделал простой скрипт для поиска PID и использования в скриптах bash ...
используйте с осторожностью !!
Снимок экрана: http://pastebin.com/Cm9YH67U
Андре
ps
илиls -l /proc/$PID/exe