一个过程组必须有一个正在运行的领导过程?

在类Unix操作系统中,如果一个进程pid和它的pgid是相等的,那么这个进程是一个进程组的领导者。

但是,如果stream程负责人已经退出,并且同一组中的其他stream程仍在运行,那么成功的领导者stream程是谁?

Solutions Collecting From Web of "一个过程组必须有一个正在运行的领导过程?"

没有成功的领导者:一旦过程组长离职,组织失去领导。 没有什么需要一个进程组有一个领导者,没有一个是完美的,你仍然可以发送信号到组中的每个元素与kill(2)

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

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

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

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

这个定义起初可能看起来很奇怪,但这背后有一个基本原理,希望能在一瞬间清楚。

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

OTOH,如果父节点在同一个会话中,但是在不同的组中,那么它有可能会用SIGCONT停止的进程,所以这个组不会被认为是孤立的,并且不需要强制唤醒停止的进程。