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ó 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:
Bạn đang tìm kiếm pstree
lệnh.
pstree
tự 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 -p
cờ để 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).
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à 123
bạn có thể sử dụng tùy chọn ps
của lệnh --ppid
:
ps --ppid 123
Bạn có thể kết hợp điều đó với pidof
lệ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)
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!
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.
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
nên tuân thủ POSIX.