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

30

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

Superjumbo
источник
1
Вы имеете в виду расположение двоичного файла или каталога, из которого запущен процесс?
Лекенстейн
Извините за двусмысленность, я имею в виду двоичный файл
SuperJumbo

Ответы:

37

Можно /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'
Эгиль
источник
О да, я был почти там. Легенда, спасибо.
Супер-Джамбо
15

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

which firefox 

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

/usr/bin/firefox

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

Н.Н.
источник
6
whichэто круто, но он возвращает только программы в вашем $ PATH. Если я побегу RandomProgramIDownloadedToErisKnowsWhere.bin, это не принесет особой пользы.
djeikyb
6

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

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
    
Lekensteyn
источник
2
Вы можете делать классные вещи с помощью /proc/$pid/exe, если двоичный файл случайно удален, вы можете восстановить его с помощью:dd if=/proc/$pid/exe of=restored-binary
Lekensteyn
1

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

ls -al /proc/{pid}/fd  

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

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

xiaoyifang
источник
Не могли бы вы просмотреть мои правки, а также просмотреть справку по редактированию, чтобы улучшить читабельность ваших ответов в будущем ... ;-)
Fabby
0

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

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

top

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

Aleks
источник