Risposte:
Un modo per ottenere la posizione binaria del processo è utilizzare lsof
e grep
per il primo txt
segmento. Ad esempio, nella shell per vedere quale binario è la shell, utilizzare il PID della shell al posto di $$
.
$ 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
Puoi vedere che la shell sta usando /bin/bash
.
Questa tecnica funziona se il processo è stato avviato utilizzando un percorso assoluto o relativo. Ad esempio, andando in una shell e in esecuzione
$ sleep 1234567
e l'utilizzo ps
in un'altra shell mostra solo come è stato lanciato:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
usando lsof
mostra quale binario ha eseguito:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
Ho installato MacPorts coreutils + with_default_names, il che spiega che l'ho preso gsleep
e non /bin/sleep
.
Esempio: stai cercando il nome del comando del processo associato per PID 45109
...
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
ps -ef con grep funziona per me. Per un nome file specifico, è sufficiente passare attraverso grep in questo modo:
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
(L'ultimo 'grep -v grep' ti impedisce semplicemente di ottenere il tuo comando grep nell'output)
; exit
dopo la dichiarazione di stampa in modo chetxt
venga stampata solo la prima voce anche se ce ne sono diverse come nell'esempio bash.