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

时间:2010-07-01 22:19:17

标签: python subprocess

我正在使用启动各种子流程的第三方库。当有异常时我想杀死所有子进程。我如何获得儿童pids列表?

4 个答案:

答案 0 :(得分:18)

您无法始终记录创建的所有子流程,因为它们可以反过来创建您不知道的新流程。但是,使用psutil来查找它们非常简单:

import psutil

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

答案 1 :(得分:2)

在创建子进程时,记录所有子进程的pid通常更安全。没有符合posix的方法来列出子PID。我知道这可以用PS工具完成。

答案 2 :(得分:1)

使用psutil可以让所有子进程(甚至是递归进程)查看https://psutil.readthedocs.io/en/latest/#psutil.Process.children

答案 3 :(得分:0)

听起来psutil是推荐的方法。但是,如果您不想依赖外部库,则可以使用--ppid命令的ps来按父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()]