Nếu tôi có số PID cho một quy trình (trên máy UNIX), làm thế nào tôi có thể tìm ra tên của quy trình liên quan của nó?
Tôi phải làm gì đây?
ps -fp PIDsẽ hiển thị toàn bộ lệnh
Nếu tôi có số PID cho một quy trình (trên máy UNIX), làm thế nào tôi có thể tìm ra tên của quy trình liên quan của nó?
Tôi phải làm gì đây?
ps -fp PIDsẽ hiển thị toàn bộ lệnh
Câu trả lời:
Trên tất cả các hệ thống tuân thủ POSIX và với Linux, bạn có thể sử dụng ps:
ps -p 1337 -o comm=
Ở đây, quá trình được chọn bởi PID của nó với -p. Các -otùy chọn định dạng đầu ra, commcó nghĩa là tên lệnh.
commandthay vì sửa nó.
$ ps -p 1 -o comm= init $ ps -p 1 -o command= / sbin / init; có nghĩa là nó không có khoảng 15 ký tự, có thể chỉ là tên nhị phân so với đường dẫn đầy đủ của nó.
commđưa ra tên nhị phân và commandtrả về đối số 0
Bạn có thể tìm thấy tên tiến trình hoặc lệnh được sử dụng bởi id-id hoặc pid từ
/proc/pid/cmdline
bằng cách làm
cat /proc/pid/cmdline
Ở đây pid là pid mà bạn muốn tìm tên
For exmaple:
# ps aux
................
................
user 2480 0.0 1.2 119100 12728 pts/0 Sl 22:42 0:01 gnome-terminal
................
................
Để tìm tên quy trình được sử dụng bởi pid 2480, bạn có thể sử dụng
# cat /proc/2480/cmdline
gnome-terminal
Để có được đường dẫn của chương trình bằng một pid nào đó, bạn có thể sử dụng:
ps ax|egrep "^ [PID]"
Ngoài ra, bạn có thể sử dụng:
ps -a [PID]
ps -aliệt kê tất cả các quy trình được liên kết với thiết bị đầu cuối, nó không nhận bất kỳ đầu vào nào.
psphiên bản, procps version 3.2.7hoạt động tốt.
# ls -la /proc/ID_GOES_HERE/exe
Thí dụ:
# ls -la /proc/1374/exe
lrwxrwxrwx 1 chmm chmm 0 Mai 5 20:46 /proc/1374/exe -> /usr/bin/telegram-desktop
readlink /proc/1337/exe. readlink - in các liên kết tượng trưng được giải quyết hoặc tên tệp chính tắc.
Bạn có thể sử dụng pmap. Tôi đang tìm kiếm PID 6649. Và cắt bỏ các chi tiết quá trình bổ sung.
$ pmap 6649 | head -1
6649: /usr/lib64/firefox/firefox
pslệnh tất cả những gì bạn sẽ thấy chỉ là java, nhưng phần còn lại của các tham số được truyền sẽ được hiển thị đầy đủ với pmap.
Bạn cũng có thể sử dụng awk kết hợp với ps
ps aux | awk '$2 == PID number for a process { print $0 }'
thí dụ:
root@cprogrammer:~# ps aux | awk '$2 == 1 { print $0 }'
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
để in LINE LINE bạn có thể sử dụng
ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
(or)
ps --headers aux |head -n 1; ps aux | awk '$2 == 1 { print $0 }'
root@cprogrammer:~# ps --headers aux |head -n 1 && ps aux | awk '$2 == 1 { print $0 }'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 24476 2436 ? Ss 15:38 0:01 /sbin/init
ps ax | grep 1và xem liệu nó thực sự trả về initquá trình, ví dụ. (Trong trường hợp của tôi, nó trả về 119 dòng không mong muốn.)
ps aux | awk 'NR==1 || $2==PID'- và không cần phải nói {print $0}vì đó là mặc định. Nhưng như bạn nhận xét, -pdù sao thì tốt hơn.
Tương tự như câu trả lời của slhck , nhưng dựa vào các thao tác tệp thay vì các lệnh:
MYPID=1
cat "/proc/$MYPID/comm"
cat /proc/1/comm=> init, không phải / sbin / init. Câu trả lời của ông có phiên bản dài hơn bao gồm. Nhưng dù sao +1.
Đáng ngạc nhiên, không ai đã đề cập đến tùy chọn -f (lệnh đầy đủ) cho ps. Tôi thích sử dụng nó với -e (mọi thứ) và đưa kết quả vào grep để tôi có thể thu hẹp tìm kiếm của mình.
ps -ef | grep <PID>
Điều này cũng rất hữu ích để xem xét các lệnh đầy đủ mà ai đó đang chạy đang chiếm nhiều tài nguyên trên hệ thống của bạn. Điều này sẽ cho bạn thấy các tùy chọn và đối số được truyền cho lệnh.
-e -fcó sẵn, grepcó thể tạo ra nhiều kết quả khớp sai, ví dụ như grep 33pid = 933 hoặc 339, ppid = 33 hoặc 933 hoặc 339, thời gian sử dụng là 33 giây hoặc 33 phút hoặc tên chương trình hoặc đối số có chứa 33 - bao gồm cả grepchính nó. Tất cả (AFAIK) psđều có -p, vì vậy chỉ cần ps -fp 33.
Tôi tìm thấy phương pháp đơn giản nhất với lệnh sau:
ps -awxs | grep pid
ps -p${pid}, điều này sẽ nhận được rất nhiều tích cực sai - bao gồm cả grepchính nó.
đã tạo một tập lệnh đơn giản để tìm PID và sử dụng trong các tập lệnh bash ...
sử dụng một cách thận trọng !!
Ảnh chụp màn hình: http://pastebin.com/Cm9YH67U

André
pshoặcls -l /proc/$PID/exe