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 PID
sẽ 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 PID
sẽ 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 -o
tùy chọn định dạng đầu ra, comm
có nghĩa là tên lệnh.
command
thay 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à command
trả 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 -a
liệ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.
ps
phiên bản, procps version 3.2.7
hoạ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
ps
lệ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 1
và xem liệu nó thực sự trả về init
quá 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, -p
dù 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 -f
có sẵn, grep
có thể tạo ra nhiều kết quả khớp sai, ví dụ như grep 33
pid = 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ả grep
chí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ả grep
chí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é
ps
hoặcls -l /proc/$PID/exe