Jawaban:
Salah satu cara untuk mendapatkan lokasi biner proses adalah dengan menggunakan lsof
dan grep
untuk txt
segmen pertama . Misalnya, dalam shell untuk melihat biner apa shell itu, gunakan PID shell di tempat $$
.
$ 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
Anda dapat melihat bahwa shell sedang digunakan /bin/bash
.
Teknik ini berfungsi jika proses diluncurkan menggunakan jalur absolut atau relatif. Misalnya, masuk ke satu shell dan berjalan
$ sleep 1234567
dan menggunakan ps
di shell lain hanya menunjukkan bagaimana diluncurkan:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
menggunakan lsof
pertunjukkan biner yang dijalankannya:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
Saya memiliki MacPorts coreutils + with_default_names diinstal, yang menjelaskan bahwa saya mengambil gsleep
dan tidak /bin/sleep
.
Contoh: Anda mencari nama perintah proses asosiasi untuk PID 45109
...
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
ps -ef dengan grep bekerja untuk saya. Untuk nama file tertentu, cukup pipa melalui grep dengan demikian:
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' akhir itu hanya menghentikan Anda mendapatkan perintah grep Anda sendiri di output)
; exit
setelah pernyataan cetak sehingga hanyatxt
entri pertama yang akan dicetak walaupun ada beberapa seperti pada contoh bash.