python杀死所有子进程甚至父已退出

时间:2014-02-14 08:27:48

标签: python subprocess cpu parent affinity

我正在尝试在群集上实现像扭矩PBS这样的作业排队系统。

一个要求是即使在父项退出后也要终止所有子进程。这很重要,因为如果某人的工作没有等待其子进程有意或无意地结束,则子进程成为孤立并被进程init采用,那么很难跟踪子进程并杀死它们。

然而,我找到了解决问题的技巧,魔术特性是子进程的cpu亲和性,因为所有子进程与其父进程具有相同的cpu亲和性。但这并不完美,因为cpu亲和力也可以故意改变。

我想知道父进程及其后代是否还有其他任何内容,同时也是不可变的

1 个答案:

答案 0 :(得分:0)

Linux中的进程表(例如几乎所有其他操作系统中)只是计算机RAM中的数据结构。它包含有关操作系统当前处理的进程的信息。

此信息包括有关每个流程的一般信息

  • 进程ID
  • 流程所有者
  • 流程优先级
  • 每个流程的环境变量
  • 父流程
  • 指向进程的可执行机器代码的指针。

信用转到Marcus Gründler

非现有信息可以帮助您。

但是当父进程id变为1(init)时,您可以使用该进程应该停止的事实。

#!/usr/local/bin/python

from time import sleep
import os
import sys

#os.getppid() returns parent pid
while (os.getppid() != 1):
    sleep(1)
    pass

# now that pid is 1, we exit the program.
sys.exit()

这会解决您的问题吗?