我正在使用启动各种子流程的第三方库。当有异常时我想杀死所有子进程。我如何获得儿童pids列表?
答案 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()]