Câu trả lời:
Một cách để có được vị trí nhị phân của quy trình là sử dụng lsof
và grep
cho txt
phân khúc đầu tiên . Ví dụ, trong shell để xem shell nhị phân là gì, hãy sử dụng PID của shell thay cho $$
.
$ 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
Bạn có thể thấy rằng vỏ đang sử dụng /bin/bash
.
Kỹ thuật này hoạt động nếu quá trình được khởi chạy bằng một đường dẫn tuyệt đối hoặc tương đối. Ví dụ: đi vào một vỏ và chạy
$ sleep 1234567
và sử dụng ps
trong shell khác chỉ cho thấy cách nó được khởi chạy:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
bằng cách sử dụng lsof
chương trình nhị phân nào nó đã chạy:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
Tôi đã cài đặt MacPorts coreutils + with_default_names, điều này giải thích rằng tôi đã chọn gsleep
và không /bin/sleep
.
Ví dụ: bạn đang theo tên lệnh quy trình liên kết cho PID 45109
...
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
ps -ef với grep làm việc cho tôi. Đối với một tên tệp cụ thể, chỉ cần chuyển qua grep như vậy:
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
(Điều đó 'grep -v grep' cuối cùng chỉ đơn giản là ngăn bạn nhận lệnh grep của riêng bạn trong đầu ra)
; exit
sau câu lệnh in để chỉtxt
mục đầu tiên sẽ được in ngay cả khi có một số như trong ví dụ bash.