Если я вижу процесс, выполняющийся с использованием ps, как мне найти исполняемый файл?


11

Если я вижу процесс, использующий использование ps -e, как я могу найти файл, который запустил его?


2
Что это за ОС? Linux, BSD, Solaris ...
Патрик

Linux ... но решения кросс-Unix приветствуются.
межзвездный

Ответы:


15

В Linux: если вы знаете PID, вы можете указать файл cmdline для этого файла. Например:

cat /proc/PID/cmdline

Это может произойти сбой, если двоичный файл был перемещен после запуска программы.

И конечно:

lsof -n | grep PID | grep ' txt '

и:

ls -la /proc/PID/exe

которая является символической ссылкой на исполняемый файл.


1
Обратите внимание, что в нем /proc/PID/cmdlineнет символа новой строки, поэтому вы, вероятно, захотите сделать что-то подобное cat /proc/PID/cmdline ; echo ''.
Кит Томпсон

На самом деле, в нем есть NUL-символы, разделяющие аргументы, так что вы можете захотеть что-то еще более сложное, напримерtr '\0' ' ' < /proc/PID/cmdline ; echo ''
Кит Томпсон,

2

Скопируйте идентификатор процесса из ps -eкоманды, а затем выполните следующее:

ps x | grep <process-id>

Разве это не сработает, если приложение редактирует argv [0]? iirc sendmail делает это.
Фолькерт ван Хойсден

Да, это вероятность. Тем не менее, это пригодится почти каждый раз.
Адитья Патавари

0

Ни один из методов ( ls, lsofили cat) в других ответов не работает для меня. Если я сделаю:

$ nano test.txt

Это мой победитель

$ pgrep -f -l test
3074 nano test.txt

Или, чтобы получить только PID, чтобы использовать его в программировании:

$ pgrep -f test
3074

Протестировано на Kali Linux v1.0.6 (на основе Debian).
По сравнению с простым ls, я должен признать, что это не очень портативное решение, но, по крайней мере, оно работает.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.