gpt4 book ai didi

linux - 进程组必须有一个正在运行的领导进程吗?

转载 作者:太空狗 更新时间:2023-10-29 11:43:25 29 4
gpt4 key购买 nike

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

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

最佳答案

没有继任的领导者:一旦流程组领导者退出,该组就会失去领导地位。进程组不需要领导者,没有领导者也很好,您仍然可以使用 kill(2) 向组中的每个元素发送信号。

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

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

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

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

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

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

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

关于linux - 进程组必须有一个正在运行的领导进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31916561/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com