如何在python中"采用"子进程

pet*_*EEy 1 python linux subprocess

如何获取我没有为其创建对象的子进程的pid?即

myProc = Popen(["sleep","30"])
Run Code Online (Sandbox Code Playgroud)

VS

Popen(["sleep","30"])
Run Code Online (Sandbox Code Playgroud)

我注意到,如果我在发送终止信号后没有轮询()或等待(),它们就变成了僵尸进程.在我的脚本中的某个点上,我想找到我的脚本是其父项的所有子进程,并向它们发送信号或轮询它们.这在python中可能吗?有可能吗?

ali*_*i_m 5

您可以psutil用来查找父Python进程的子进程.例如:

import psutil
import os
import subprocess

subprocess.Popen(['sleep', '30'])

parent_pid = os.getpid()
parent = psutil.Process(parent_pid)

for child in parent.children():
    print(child)    # do something here
Run Code Online (Sandbox Code Playgroud)

打印:

psutil.Process(pid=16822, name='sleep')
Run Code Online (Sandbox Code Playgroud)

从那里你可以轮询他们,杀死他们等.