Nếu tôi có nhiều bản sao của cùng một ứng dụng trên đĩa và chỉ có một bản đang chạy, như tôi có thể thấy ps
, làm thế nào tôi có thể biết đường dẫn tuyệt đối để phân biệt với các ứng dụng khác?
Nếu tôi có nhiều bản sao của cùng một ứng dụng trên đĩa và chỉ có một bản đang chạy, như tôi có thể thấy ps
, làm thế nào tôi có thể biết đường dẫn tuyệt đối để phân biệt với các ứng dụng khác?
Câu trả lời:
% sudo ls -l /proc/PID/exe
ví dụ:
% ps -auxwe | grep 24466 gốc 24466 0,0 0,0 1476 280? S 2009 0:00 giám sát sshd % sudo ls -l / Proc / 24466 / exe lrwxrwxrwx 1 root root 0 Feb 1 18:05 / Proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise
ls: cannot read symbolic link /proc/28783/exe: Permission denied
- không phải là chạy ls
lệnh, mà là truy cập thông tin quy trình của một quy trình không thuộc về bạn. Trên hộp của tôi, khoảng 97% tất cả các quy trình được liệt kê trong / Proc là các quy trình gốc và các quy trình khác được phân phối trên 11 người dùng khác nhau.
Sử dụng:
pwdx $pid
Điều này cung cấp cho bạn thư mục làm việc hiện tại của pid, không phải đường dẫn tuyệt đối của nó.
Thông thường which
lệnh sẽ cho bạn biết cái nào đang được gọi từ shell:
#> which vlc
/usr/bin/vlc
$pid
gì?" Bài đăng đã chỉnh sửa vẫn không trả lời câu hỏi. which
chỉ đơn thuần nói "Nếu lệnh nằm trên đường dẫn, thì nó là gì?"
pwdx
trả lại cho tôi đường dẫn tuyệt đối của chương trình có thể thực hiện được của quá trình tùy thuộc vào pid trên redhat x64 6.3.
Một cách là ps -ef
ps auxwwwe
Nguồn:
https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output
Câu trả lời nhanh là sử dụng ps
với các tùy chọn hoặc /proc
thông tin hệ thống tập tin. Điều đó thường sẽ làm việc, nhưng không được bảo đảm. Nói chung, không có câu trả lời chắc chắn, đảm bảo. Chẳng hạn, nếu tệp thực thi bị xóa trong khi thực thi, do đó không có đường dẫn đến tệp thì sao?
Xem Câu hỏi thường gặp về Unix để biết thêm chi tiết, đặc biệt là các câu hỏi 4.3 và 4.4.
Tại sao mọi người mong đợi bạn biết đến PID? Đây là cách thân thiện với con người:
pwdx `pgrep ###process_name###`
ps
, vì vậy nó có thể sẽ hiển thị PID
lsof là một lựa chọn. Bạn có thể thử một cái gì đó như dưới đây:
lsof -p PROCESS_ID
Điều này sẽ liệt kê tất cả các tệp được mở theo quy trình bao gồm cả vị trí thực tế của tệp thực thi. Sau đó có thể thêm một vài awk, cắt, grep, vv để tìm ra thông tin mà bạn đang tìm kiếm.
Ví dụ, tôi đã thực hiện các lệnh sau để xác định quá trình 'java' của tôi đến từ đâu:
lsof -p 12345 | awk '{in $ NF}' | grep 'java $'
ls
lệnh.