如何在Python中列出所有子进程?
我正在使用一个第三方库,它会启动一些子进程。当出现异常时,我想要结束所有的子进程。我该如何获取子进程的ID列表呢?
4 个回答
2
听起来 psutil 是推荐的方法。不过,如果你不想依赖外部库的话,可以使用 ps
命令中的 --ppid
选项来根据父进程ID来筛选进程。(当然,这个前提是你在一个支持 ps
命令的操作系统上。)
下面是一个示例,展示了如何调用这个命令:
ps_output = run(['ps', '-opid', '--no-headers', '--ppid', str(os.getpid())],
stdout=PIPE, encoding='utf8')
child_process_ids = [int(line) for line in ps_output.stdout.splitlines()]
4
在创建子进程时,记录下它们的进程ID(pid)通常是更安全的做法。因为没有一种符合posix标准的方法可以列出所有子进程的进程ID。我知道可以使用PS工具来做到这一点。
54
你不能总是记录所有子进程的创建情况,因为这些子进程也可能会创建新的进程,而你可能对此并不知情。不过,使用 psutil 来找到它们其实很简单:
import psutil
current_process = psutil.Process()
children = current_process.children(recursive=True)
for child in children:
print('Child pid is {}'.format(child.pid))