Можно ли получить имя файла процесса, используя PID? ps отображает много полезной информации о процессе, но не подсказку о расположении исполняемого файла процесса.
13
Одним из способов получения двоичного местоположения процесса является использование lsof
и grep
для первого txt
сегмента. Например, в оболочке, чтобы увидеть, что такое двоичная оболочка, используйте вместо нее PID оболочки $$
.
$ lsof -p $$ | grep txt
bash 78228 blair txt REG 14,2 1244928 6568359 /bin/bash
bash 78228 blair txt REG 14,2 1059792 23699809 /usr/lib/dyld
bash 78228 blair txt REG 14,2 136368128 81751398 /private/var/db/dyld/dyld_shared_cache_i386
Вы можете видеть, что оболочка использует /bin/bash
.
Этот метод работает, если процесс был запущен с использованием абсолютного или относительного пути. Например, зайдя в одну оболочку и запустив
$ sleep 1234567
и использование ps
в другой оболочке только показывает, как он был запущен:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
используя lsof
показывает, какой двоичный файл он выполнял:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
У меня установлены MacPorts coreutils + with_default_names, что объясняет, что я поднял gsleep
и нет /bin/sleep
.
; exit
после оператора print, чтобыtxt
была напечатана только первая запись, даже если их несколько, как в примере с bash.Пример: вы после имени команды ассоциированного процесса для
PID 45109
...источник
попробуй ps aux
источник
у меня работает ps -ef с grep. Для конкретного имени файла просто пройдите через grep следующим образом:
(Этот последний 'grep -v grep' просто останавливает получение вашей собственной команды grep в выводе)
источник
ps -p <pid> -команда
источник