进程组必须有 运行 个领导进程吗?

Must a process group have a running leader process?

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

但是,如果进程leader已经退出,而同组的其他进程还在运行,谁是继任的leader进程?

没有继任的领导者:一旦流程组领导者退出,该组就会失去领导权。进程组不需要领导者,没有领导者也很好,您仍然可以使用 kill(2).

向组中的每个元素发送信号

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

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

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

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

这个定义乍一看似乎很奇怪,但这背后有一个基本原理,稍后(希望)会很清楚。

那么为什么了解一个群体是否孤立很重要?由于停止的进程。如果一个进程组是孤立的,并且该组中至少有一个进程被停止(例如,它被 SIGSTOPSIGTSTP 挂起),那么 POSIX.1 要求每个孤立组中的进程被发送 SIGHUP,然后是 SIGCONT。这样做的原因是为了避免进程永远停止:考虑会话领导者和进程组领导退出的情况,并且该组只剩下一个停止的进程。由于父级在另一个会话中,它没有发送它的权限 SIGCONT,因此该进程将永远不会再次 运行。

OTOH,如果父级在同一个会话中但在不同的组中,那么它有可能用 SIGCONT 发出停止进程的信号,因此该组不被视为孤立的并且有无需强行唤醒停止的进程。