Якщо я бачу процес, що працює за допомогою PS, як я можу знайти виконуваний файл?


11

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


2
Що це за ОС? Linux, BSD, Solaris ...
Патрік

Linux ... але багатокористувацькі рішення вітаються.
міжзірка

Відповіді:


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 робить це.
Фолкерт ван Хейсден

Так, це ймовірність. Тим більше це стає корисним майже кожного разу.
Aditya Patawari

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.