[英]Python psutil how to find a child process
鉴于 Linux 上的 PyQt5,我有一个应用程序可以启动终端仿真器 (rxvt) 并运行一个命令 (gaurdian),该命令运行另一个程序 (goo)。 像这样
medi@medi:~> pstree -p 4610
rxvt(4610)─┬─gaurdian(4612)───goo(4613)
└─rxvt(4611)
我试图找到“goo”的pid。 所以我继续
gooPID = 12 # some random value to show my point
self.process.start(cmd, cmdOpts)
rxvtPID = self.process.processId()
try:
for c in psutil.Process(rxvtPID).children(True):
print("pid=%d name=%s" % (c.pid, c.name()))
if c.name() == 'gaurdian':
gooPID = c.pid
except (psutil.ZombieProcess, psutil.AccessDenied, psutil.NoSuchProcess) as err:
print(err)
print("gooPID=%d " % gooPID )
跟踪日志显示:
rxvtPID=4610 name=rxvt
gooPID=12
这表明 gooPID 的初始值没有改变。 似乎也没有发生孩子的遍历(即我没有看到孩子的孩子等)。 我这样做对吗?
我设法通过在 psutil 开始遍历 /proc 文件系统之前插入 sleep(1) 来解决这个问题。 那是
209 # ----------------------- getPidByName() ----------------------
210 def getPidByName(self, name):
211 rxvtProc = psutil.Process(self.process.processId() )
212 time.sleep(1) # else /proc is not ready for read
213 pid = None
214 try:
215 for c in rxvtProc.children(True):
216 # assumption: gaurdian has only one child
217 if c.name() == name:
218 return psutil.Process(c.pid).children()[0].pid
219 except psutil.Error as err:
220 print(err)
221 return pid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.