Відповіді:
Один із способів отримання бінарного розташування процесу - це використання 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
.
Приклад: ви після імені команди асоційованого процесу для PID 45109
...
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
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 у висновку)
ps -p <pid> -Обіг
L1A1:~ a1155344$ ps -p1 -Ocommand
PID TT STAT TIME COMMAND
1 ?? Ss 0:02.26 /sbin/launchd
; exit
після заяви про друк так, щоtxt
буде надруковано лише перший запис, навіть якщо їх декілька, як у прикладі bash.