2016-11-09 84 views
0

场景:子进程创建了一个子进程等,我怎么能得到它的pid?获取递归子进程的pid

我用subprocess.popen来启动第一个子进程,例如word文件,这个word文件生成了一个新的子进程,我怎么能得到它的pid?

+0

[打开与POPEN的处理和获取PID]的可能的复制(http://stackoverflow.com/questions/7989922/opening-a-process-with-popen-并得到该pid) –

+0

你甚至读过这个问题吗? 我问了内部pid – MichaelK

+0

是的,如果你有根进程的pid,你可以通过调用模块中的pstree来请求嵌套的pid, pstree -p $ pid(root_process_pid)| grep -o'([0-9] \ +)'| grep -o'[0-9]'+'http://unix.stackexchange.com/questions/67668/elegantly-get-list-of-descendant-processes –

回答

1

使用psutil:

parent = psutil.Process(parent_pid) 
children = parent.children() 
# all child pids can be accessed using the pid attribute 
child_pids = [p.pid for p in children] 
+0

它没有帮助:( child_pids似乎总是空的(即使ch ild过程出现) – MichaelK

+1

然后你的过程使用一些技术从孩子分离。您也可以使用psutil来查找子流程的父pid。也许这有助于发现发生了什么。 – languitar