xml*_*lmx 4 unix linux operating-system pid process
在类 Unix 操作系统中,如果一个进程pid和它pgid的进程相等,那么这个进程就是一个进程组长。
但是,如果进程领导者已经退出,而同一组中的其他进程仍在运行,那么谁是后续的领导者进程?
没有接任的领导:一旦流程组领导退出,该组将失去领导。没有什么要求进程组有领导者,没有领导者也没关系,而且您仍然可以使用kill(2).
领导者退出时究竟发生了什么取决于组中进程的状态以及该组是否归类为孤立进程组。
首先,让我们看看什么是孤立组。
POSIX 将孤立进程组定义为一个组,其中属于该组的每个进程的父进程要么是该组的成员,要么是另一个会话的一部分。
换句话说,只要该组中的至少一个进程在不同进程组但在同一会话中具有父进程,则该进程组不会孤立。
这个定义乍一看似乎很奇怪,但这背后有一个基本原理,(希望)稍后会清楚。
那么为什么知道一个群体是否是孤儿很重要?由于停止的进程。如果一个进程组是孤立的,并且该组中至少有一个进程被停止(例如它被SIGSTOP或挂起SIGTSTP),那么 POSIX.1 要求孤立组中的每个进程都在发送SIGHUP后跟SIGCONT。这样做的原因是为了避免进程永远停止:考虑会话领导者和进程组领导者退出的情况,并且该组留下一个停止的进程。由于父SIGCONT进程在另一个会话中,它没有发送它的权限,因此该进程将永远不会再次运行。
OTOH,如果父进程在同一个会话中,但在不同的组中,那么它有可能用 向停止的进程发出信号SIGCONT,因此该组不被视为孤立的,并且不需要强行唤醒停止的进程。