2010-07-01 37 views
11

Tôi đang sử dụng thư viện của bên thứ ba bắt đầu các quy trình phụ khác nhau. Khi có một ngoại lệ, tôi muốn giết tất cả các tiến trình con. Làm thế nào tôi có thể nhận được một danh sách các pids trẻ em?Làm thế nào để bạn liệt kê tất cả các tiến trình con trong python?

+0

Có thể giúp cho hệ điều hành của bạn biết, vì điều này phụ thuộc vào nền tảng –

+0

POSIX có giúp bạn không? Tôi cho rằng một số người cũng muốn biết câu trả lời của Windows. – Rowan

+0

Xem: http://stackoverflow.com/a/4229404/376587 –

Trả lời

1

Nó thường an toàn hơn để ghi lại các khay của tất cả các quy trình con của bạn khi bạn tạo chúng. Không có một cách tương thích posix để liệt kê các PID con. Tôi biết điều này có thể được thực hiện với công cụ PS.

+2

Vâng, tôi mong đợi điều đó. Vấn đề là nó không phải là tôi tạo ra các quy trình, đó là thư viện của bên thứ ba. Oh well. Nó không phải là một showstopper. – Rowan

+0

Tôi có thể nhận được chấp nhận không? –

+1

Thực ra câu trả lời của bạn không phải là giải pháp. Tôi thực sự cần biết làm thế nào tôi có thể nhận được '' psutil.Process'' để cho tôi đệ quy '' memory_info'' và '' cpu_percent'' nhưng cuộc gọi của tôi tới subprocess thực sự mở subprocess khác (ít nhất là 4 hoặc 5 cấp độ) một I không có cách nào để theo dõi tất cả các PID. – Natim

10

Bạn không thể lúc nào cũng ghi lại tất cả các tiểu trình khi chúng được tạo ra, vì chúng có thể lần lượt tạo ra các quy trình mới mà bạn không nhận thức được. Tuy nhiên, nó khá đơn giản để sử dụng psutil để tìm chúng:

import psutil 

current_process = psutil.Process() 
children = current_process.children(recursive=True) 
for child in children: 
    print('Child pid is {}'.format(child.pid)) 
+0

Tôi nghĩ _parent_ và _current_process_ giống nhau?) – dyomas

+0

Yup, được chỉnh sửa để sửa. Cảm ơn @dyomas. –

Các vấn đề liên quan