如何在Python中列出所有子进程?

40 投票
4 回答
35773 浏览
提问于 2025-04-16 00:42

我正在使用一个第三方库,它会启动一些子进程。当出现异常时,我想要结束所有的子进程。我该如何获取子进程的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))

撰写回答