Tìm con của quá trình


15

Có cách nào để biết, ai là con của quá trình cụ thể? ví dụ những đứa trẻ mà ID cha mẹ của chúng là foo?

Câu trả lời:


26

Bạn đang tìm kiếm pstreelệnh. pstreetự nó sẽ liệt kê tất cả các quy trình ở dạng cây (giống như lsblk). Bạn cũng có thể sử dụng -pcờ để nhận được các PID được liệt kê và cũng -sđể hiển thị quy trình cha:

$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
             |-{gdbus}(605)
             |-{gmain}(603)
             `-{probing-thread}(606)

Một cách (có thể) tuân thủ POSIX để có được các PID con (mà tôi đã đề cập trong các nhận xét ở nơi khác):

ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'

Điều này nói psđể ghi PID và PID gốc của tất cả các quy trình (không có tiêu đề), và sau đó sử dụng awkđể xem dòng nào có PID đã cho trong trường đầu tiên (PID gốc) và in trường thứ hai tương ứng (PID con).


10

Nếu bạn chỉ muốn nhìn thấy những đứa con ngay lập tức của một quá trình có PID là 123bạn có thể sử dụng tùy chọn pscủa lệnh --ppid:

ps --ppid 123

Bạn có thể kết hợp điều đó với pidoflệnh để lấy con của một tiến trình theo tên, tức là đưa ra một quy trình được gọi làfoo

ps --ppid $(pidof foo)

10

Một tùy chọn khác là, để sử dụng System Monitor (được cài đặt sẵn). Trong tùy chọn "Phụ thuộc" của SM Menubar, bên dưới "Chế độ xem", để có phản hồi trực quan, hiển thị quá trình phụ huynh và trẻ em như hiển thị trong ảnh chụp màn hình bên dưới.

Tôi thích bản thân CL (Dòng lệnh) và đề nghị, rằng những người sử dụng Linux, trong trường hợp này là Ubuntu hàng ngày, hãy đầu tư thời gian của họ vào việc học các lệnh cơ bản, qua Ứng dụng GUI hoặc ít nhất là có thể thành thạo cả hai bằng cấp nhất định!

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


1
OT: Chủ đề đó là gì?
muru

1
Tôi sử dụng Ubuntu + GnomeShell 3.2.1 Chủ đề được gọi là "AdwaitaDark" là chủ đề GTK3, nhưng nó được tùy chỉnh và không khả dụng, như bạn thấy trong ảnh chụp màn hình.
v2r

6

Tôi không phải là một chuyên gia, nhưng đọc những câu trả lời ở trên dường như có thể có một cách trực tiếp hơn để thực hiện điều này thông qua hệ thống tập tin Proc, ví dụ như để sử dụng lập trình trong một kịch bản thay vì hiển thị có thể đọc được. Và thực sự có: đối với một quy trình có mã ID $ mypid, các quy trình con của nó được liệt kê trong

/proc/$mypid/task/$mypid/children

ví dụ

$ cat /proc/3123/task/3123/children 
3131 3133

Tương tự, bạn có thể nhận ID tiến trình cha thông qua mục nhập "PPid" trong tệp

/proc/$mypid/task/$mypid/status

ví dụ

$ grep PPid /proc/3131/task/3131/status
PPid:   3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123

Mặc dù vậy, tôi không chắc cách di động này vượt ra ngoài các hệ thống Linux.


1
Nếu tính di động là một mối quan tâm: ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2nên tuân thủ POSIX.
muru
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.