Как определить путь к двоичному файлу процесса?

Есть ли способ узнать каталог / место на диске, с которого был запущен процесс? Я знаю о монтировании /proc, но на самом деле не знаю, где его искать.

5 ответов

Решение

/proc способ будет осмотреть exe ссылка в каталоге, соответствующая pid.

Давайте рассмотрим пример с update-notifier:

Найдите pid 15421 в этом примере:

egil@gud:~$ ps x | grep update-notifier
 2405 pts/4    S+     0:00 grep update-notifier
15421 ?        Sl     0:00 update-notifier

Посмотрите на символическую ссылку:

egil@gud:~$ file /proc/15421/exe
/proc/15421/exe: symbolic link to `/usr/bin/update-notifier'

Может быть which это то, что вы ищете. Например, в моей системе

which firefox 

возвращается

/usr/bin/firefox

См. Также раздел "Найти путь к приложениям, работающим в Solaris, Ubuntu, Suse или Redhat Linux".

Если у вас есть идентификатор процесса, вы можете использовать:

readlink -f /proc/$pid/exe

(заменить $pid по идентификатору процесса)

Если процесс не принадлежит вам, вам придется поставить sudo перед ней.

Пример определения местоположения команды firefox:

  1. Выход из ps ax -o pid,cmd | grep firefox:

    22831 grep --color=auto firefox
    28179 /usr/lib/firefox-4.0.1/firefox-bin
    
  2. 28179 это идентификатор процесса, поэтому вы должны запустить:

    readlink -f /proc/28179/exe
    

    какие выводы:

    /usr/bin/firefox
    

Все команды в других ответах хороши, но вы могли бы сделать еще больше - посмотреть, как на самом деле выполнялся какой-то процесс, прежде чем он попал в список процессов.

Запустите в терминале:

top

И пока он работает, нажмите клавиатуру C и вы получите команду процессов, которые были запущены.

Нажмите Ctrl+Alt+T, чтобы перейти к терминалу и введите:

ls -al /proc/{pid}/fd  

а затем проверьте вывод

Это перечислит все файлы, с которыми связан ваш процесс...

Другие вопросы по тегам