Python Windows进程;如何从已知死亡的父母那里找到孤儿?

Python Windows进程;如何从已知死亡的父母那里找到孤儿?,python,windows,jenkins,process,Python,Windows,Jenkins,Process,这个问题可能有点学术性;但还是有一些令人费解的事情 假设在windows(8+)计算机上有一个进程(在本例中是一个服务),比如proc_0。我可以向此发送一个运行特定内容的请求。这是由proc_0启动(比如)proc_a来完成的。然后,proc_a产生proc_b,而proc_b又可能产生proc_c,而proc_c又可能产生proc_d 我们将在以下流程树中结束: 过程0 |_过程a |____过程b |______过程c |________过程 假设我只影响过程中发生的事情 好的,我们想要的

这个问题可能有点学术性;但还是有一些令人费解的事情

假设在windows(8+)计算机上有一个进程(在本例中是一个服务),比如proc_0。我可以向此发送一个运行特定内容的请求。这是由proc_0启动(比如)proc_a来完成的。然后,proc_a产生proc_b,而proc_b又可能产生proc_c,而proc_c又可能产生proc_d

我们将在以下流程树中结束:

过程0
|_过程a
|____过程b
|______过程c
|________过程

假设我只影响过程中发生的事情

好的,我们想要的是如果proc_a死了,proc_a的每个孩子也应该死

如果proc_0杀死proc_a,问题就会出现。在windows上,这个“孤儿”进程和它(及其子进程)仍然活着

现在,proc_b,我唯一能决定做什么的过程,实际上是观察发生了什么,也就是说,如果proc_a死了,它会杀死它的孩子。好的proc_b可能知道proc_c的子proc_d,所以它会杀死它,然后杀死proc_c

但这是理论上的。。。。在proc_c被proc_b杀死之前,proc_c刚刚产生了另一个子proc_z。proc_b现在不知道proc_z。。。当proc_c最终死亡时,它将成为孤儿(请记住,我不能对proc_c的行为做任何事情,或者即使它因为其他原因以艰难的方式被杀死)。现在,流程如下所示:

过程0
proc_b(孤儿,但我知道)
proc_z(孤儿,但我不知道)

proc_b我可以终止我自己,但是有没有办法检测到proc_z实际上是由我知道的一个进程启动的,并且刚刚被杀死(即它也应该死亡)

好的,我可以找到孤儿程序,但是,我如何决定是否可以杀人?proc_z将没有父进程,但可能有一个旧的父pid。即使我知道这个pid实际上是我从proc_c知道的,但我没有机会真正检测到proc_z是否是由proc_c启动的,或者是一个完全不同的进程也死掉了,操作系统只是碰巧重用了我死掉的proc_c中的pid


与现实相关,这是关于我在windows jenkins奴隶身上看到的;这导致我插入proc_b,因为取消作业会使子进程运行。jenkins可能对此有更新,但“理论”问题——决定是否杀死这名孤儿——仍然在发挥作用,我想。

windows是否有Linux
PGID
(进程组id)的等价物?@PatrickHaugh-是的,也可以通过shell查看WMI可能会有所帮助:
powershell“Get-WMIObject Win32_进程-Property ProcessId,ParentProcessId | Select ProcessId,ParentProcessId”
windows是否有与Linux
PGID
(进程组id)等效的进程?@PatrickHaugh-是的,另请参阅WMI可能通过shell提供帮助:
powershell“Get-WMIObject Win32_进程-Property ProcessId,ParentProcessId |选择ProcessId,ParentProcessId“