流程组必须有正在运行的领导流程吗?

时间:2015-08-10 09:56:03

标签: linux unix process operating-system pid

在类Unix操作系统中,如果一个进程' pid及其pgid相等,则该流程是流程组负责人。

但是,如果流程负责人退出并且同一组中的其他流程仍在运行,那么谁是后续的领导流程?

1 个答案:

答案 0 :(得分:4)

没有成功的领导者:一旦进程组组长退出,该组织就会失去领导力。没有任何东西需要一个进程组来拥有一个领导者,没有一个进程组是完全没问题的,你仍然可以使用kill(2)向组中的每个元素发送信号。

领导者退出时究竟发生了什么取决于组中进程的状态以及该组是否归类为孤立进程组。

首先,让我们看看什么是孤儿群。

POSIX将孤立进程组定义为一个组,其中属于该组的每个进程的父进程是该组的成员或是另一个进程的一部分。

换句话说,只要组中的至少一个进程具有不同进程组但处于同一会话中的父进程,进程组就不会孤立。

这个定义起初可能看起来很奇怪,但这背后有一个理由,它(希望)会在一瞬间明白。

那么为什么知道一个群体是孤儿是否重要?因为停止了进程。如果进程组是孤立的,并且该组中至少有一个进程被停止(例如,它被SIGSTOPSIGTSTP暂停),那么POSIX.1要求孤立的每个进程小组发送SIGHUP后跟SIGCONT。这样做的原因是为了避免永久停止进程:考虑会话负责人和进程组负责人退出的情况,并且该组留下停止的进程。由于父级在另一个会话中,因此它没有权限发送它SIGCONT,因此该进程永远不会再次运行。

OTOH,如果父母在同一个会话中但在另一个群组中,那么它有可能用SIGCONT发出已停止的流程的信号,因此该群组不会被视为孤儿,也不需要强行唤醒已停止的进程。