繁体   English   中英

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

[英]How do you list all child processes in python?

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

您不能总是在创建子流程时记录所有子流程,因为它们反过来会创建您不知道的新流程。 但是,使用 psutil 查找它们非常简单:

import psutil

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

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

听起来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()]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM