Nếu tôi thấy một quá trình đang chạy bằng ps, làm thế nào tôi có thể tìm thấy tệp thực thi?


11

Nếu tôi có thể thấy một quá trình đang chạy bằng cách sử dụng ps -e, làm thế nào tôi có thể tìm thấy tệp đã khởi chạy nó?


2
Hệ điều hành này là gì? Linux, BSD, Solaris ...
Patrick

linux ... nhưng giải pháp cross-unix hoan nghênh.
liên sao

Câu trả lời:


15

Trên Linux: nếu bạn biết về PID, bạn có thể gửi tệp cmdline cho tệp đó. Ví dụ:

cat /proc/PID/cmdline

Điều này có thể sẽ thất bại nếu nhị phân được di chuyển sau khi chương trình được bắt đầu.

Và tất nhiên:

lsof -n | grep PID | grep ' txt '

và:

ls -la /proc/PID/exe

đó là một liên kết tượng trưng để thực thi.


1
Lưu ý rằng /proc/PID/cmdlinekhông có ký tự dòng mới, vì vậy bạn có thể muốn làm một cái gì đó như cat /proc/PID/cmdline ; echo ''.
Keith Thompson

Trên thực tế, nó có các ký tự NUL phân tách các đối số, vì vậy bạn có thể muốn một cái gì đó thậm chí phức tạp hơn nhưtr '\0' ' ' < /proc/PID/cmdline ; echo ''
Keith Thompson

2

Sao chép id quá trình từ ps -elệnh và sau đó chạy như sau:

ps x | grep <process-id>

Sẽ không thất bại nếu một ứng dụng chỉnh sửa argv [0]? iirc sendmail làm điều đó.
Dân gian van Heusden

Vâng, đó là một xác suất. Không có gì ít hơn điều này có ích hầu như mọi lúc.
Aditya Patawari

0

Không ai trong số các phương pháp ( ls, lsofhoặc cat) trong câu trả lời khác làm việc cho tôi. Nếu tôi làm:

$ nano test.txt

Đây là người chiến thắng của tôi ,:

$ pgrep -f -l test
3074 nano test.txt

Hoặc, để chỉ nhận được PID để sử dụng nó trong lập trình:

$ pgrep -f test
3074

Đã thử nghiệm trên Kali Linux v1.0.6 (dựa trên Debian).
So với một đơn giản ls, tôi phải thừa nhận nó không phải là một giải pháp di động, nhưng ít nhất nó hoạt động.

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.