як отримати ім'я файлу процесу від PID в MacOS?


13

Чи можливо отримати ім’я файлу процесу за допомогою 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

У мене встановлені coreutils MacPorts + з_помисленими_іменами, що пояснює, що я взяв, gsleepа ні /bin/sleep.


Трубопровід lsof виводу через awk працює чудово, з одним незначним доповненням. Я додав ; exitпісля заяви про друк так, що txtбуде надруковано лише перший запис, навіть якщо їх декілька, як у прикладі bash.
qqx

2

Приклад: ви після імені команди асоційованого процесу для PID 45109...

>    % ps awx | awk '$1 == 45109 { print $5 }'
>    /Applications/Safari.app/Contents/MacOS/Safari

2
Не відображатиметься повний бінарний шлях, якщо двійковий файл був запущений просто назвою, не вказуючи шлях.
grigoryvp

не працює правильно, якщо шлях містить пробіли
Пітер Лапісу


1

ps -ef з grep працює для мене. Для конкретного імені файлу просто переведіть через grep таким чином:

MacBook:~ Me$ ps -ef | grep Safari | grep -v grep
  501 15733   301   0   0:25.76 ??         1:58.24 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_4977855

(Цей остаточний 'grep -v grep' просто зупиняє отримання власної команди grep у висновку)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.