Làm thế nào để có được tên tệp quá trình từ PID trong MacOS?


13

Có thể lấy tên tệp của một quá trình bằng cách sử dụng PID không? ps hiển thị rất nhiều thông tin hữu ích về một quy trình, nhưng không phải là một gợi ý về vị trí tệp thực thi quy trình.

Câu trả lời:


13

Một cách để có được vị trí nhị phân của quy trình là sử dụng lsofgrepcho txtphâ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 pstrong 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 lsofchươ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 gsleepvà không /bin/sleep.


Đầu ra lsof đường ống thông qua awk hoạt động tuyệt vời, với một bổ sung nhỏ. Tôi đã thêm vào ; exitsau câu lệnh in để chỉ txtmục đầu tiên sẽ được in ngay cả khi có một số như trong ví dụ bash.
qqx

2

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

2
Sẽ không hiển thị đường dẫn nhị phân đầy đủ nếu nhị phân được bắt đầu chỉ bằng tên mà không chỉ định đường dẫn.
grigoryvp

không hoạt động đúng, nếu đường dẫn chứa khoảng trắng
Peter Lapisu


1

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)


1

ps -p <pid> -Ocommand

L1A1:~ a1155344$ ps -p1 -Ocommand
  PID   TT  STAT      TIME COMMAND
    1   ??  Ss     0:02.26 /sbin/launchd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.