Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 流程组必须有一个正在运行的领导流程吗?_Linux_Unix_Process_Operating System_Pid - Fatal编程技术网

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

Linux 流程组必须有一个正在运行的领导流程吗?,linux,unix,process,operating-system,pid,Linux,Unix,Process,Operating System,Pid,在类似Unix的操作系统中,如果进程的pid与其pgid相等,则该进程是进程组组长 但是,如果流程负责人已退出,且同一组中的其他流程仍在运行,则谁是后续流程负责人?没有后续负责人:一旦流程负责人退出,该组将失去领导权。没有什么需要一个进程组有一个领导者,没有领导者是完全可以的,并且您仍然可以使用kill(2)向组中的每个元素发送信号 领导者退出时会发生什么具体情况取决于组中进程的状态以及组是否分类为孤立进程组 首先,让我们看看什么是孤儿团体 POSIX将孤立进程组定义为一个组,其中属于该组的每个

在类似Unix的操作系统中,如果进程的
pid
与其
pgid
相等,则该进程是进程组组长


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

没有后续负责人:一旦流程负责人退出,该组将失去领导权。没有什么需要一个进程组有一个领导者,没有领导者是完全可以的,并且您仍然可以使用
kill(2)
向组中的每个元素发送信号

领导者退出时会发生什么具体情况取决于组中进程的状态以及组是否分类为孤立进程组

首先,让我们看看什么是孤儿团体

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

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

这个定义一开始似乎有些奇怪,但背后有一个基本原理,这一点(希望)在一瞬间就会清楚

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

OTOH,如果父进程在同一个会话中,但在不同的组中,则它可能会使用
SIGCONT
向已停止的进程发送信号,因此该组不会被视为孤立的,也不需要强制唤醒已停止的进程