在类 Unix 操作系统中,如果一个进程'pid
和它的pgid
相等,则该进程是进程组的领导者。
但是,如果进程领导者已经退出,并且同组中的其他进程仍在运行,那么谁是继任的领导者进程?
没有继任领导者:一旦流程组领导者退出,该组就失去了领导权。没有什么要求流程组有领导者,没有领导者也完全可以,并且您仍然可以使用以下命令向组中的每个元素发送信号kill(2)
.
当领导者退出时到底会发生什么取决于组中进程的状态以及该组是否归类为孤立进程组。
首先我们来看看什么是孤儿群体。
POSIX 将孤立进程组定义为这样一个组,其中属于该组的每个进程的父进程要么是同一组的成员,要么是另一个会话的一部分。
换句话说,只要组中至少有一个进程的父进程位于不同进程组但位于同一会话中,该进程组就不是孤立进程。
这个定义一开始可能看起来很奇怪,但是这背后有一个基本原理,(希望)很快就会清楚。
那么为什么知道一个群体是否是孤儿很重要呢?由于进程已停止。如果一个进程组是孤立的,并且该组中至少有一个进程已停止(例如,它被挂起SIGSTOP
or SIGTSTP
),那么 POSIX.1 要求发送孤立组中的每个进程SIGHUP
其次是SIGCONT
。这样做的原因是为了避免进程永远停止:考虑会话领导者和进程组领导者退出的情况,并且组留下一个停止的进程。由于父级处于另一个会话中,因此无权发送它SIGCONT
,因此该进程将永远不会再次运行。
OTOH,如果父进程位于同一会话但位于不同的组中,那么它有可能会用以下命令发出已停止进程的信号:SIGCONT
,因此该组不被视为孤立进程,并且无需强制唤醒停止的进程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)