![]() |
1
14
有趣的问题——尤其是因为它在这么长时间里都没有部分答案。 POSIX基本定义一些来自posix定义部分的引用:
POSIX系统接口
还有:
解释正如定义所表明的那样,会话可能由多个进程组组成。在广泛的范围内,一个流程可能会改变流程组(尽管它在任何时候只属于一个流程组)。会话处理的选项更加有限;基本上,一个进程要么仍然是其原始会话的成员,要么可以使自己成为新会话的领导者。 复制问题的部分内容:
我怀疑括号应该是“前台进程组(其ID应该等于组长的PID)”。根据定义(3.292),过程组组长是PID与过程组ID相同的过程,我没有引用相关资料,但我相信将信号发送给过程组组长是正确的。
注意,前台进程通过调用
您可以这样做,但它也会创建一个新的会话。你可能想用
是的,这基本上是正确的。是的,可能还有一些模糊的东西需要跟踪。例如,您可能需要考虑控制tty。
a之后的子进程
|
![]() |
2
0
我相信使用基本API通常是学习新概念的最佳方法,所以让我们尝试一下。
这说明了如果子进程组不随
主C
编译:
没有运行
没有任何cli参数,
可能的结果:
程序挂起。
如我们所见,两个进程的pgid是相同的,因为它是通过
然后每当你点击:
它再次输出:
这说明了:
通过向两个进程发送不同的信号来退出程序,例如使用
奔跑
如果使用参数运行,例如:
然后子级更改其pgid,现在每次只从父级打印一个sigint:
现在,每当你点击:
只有父级也接收到信号:
您仍然可以像以前一样使用sigquit杀死父级:
然而,孩子现在有一个不同的pgid,并且不接收该信号!这可以从以下方面看出:
你必须明确地杀死它:
这就清楚了为什么存在信号组:否则,我们将得到一组剩余的进程,以便随时手动清除。 在Ubuntu 18.04上测试。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 4 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 4 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 4 月前 |