![为什么在子进程调用 exec 函数之一后,进程无法更改其子进程之一的进程组 ID?](https://linux22.com/image/134170/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E5%AD%90%E8%BF%9B%E7%A8%8B%E8%B0%83%E7%94%A8%20exec%20%E5%87%BD%E6%95%B0%E4%B9%8B%E4%B8%80%E5%90%8E%EF%BC%8C%E8%BF%9B%E7%A8%8B%E6%97%A0%E6%B3%95%E6%9B%B4%E6%94%B9%E5%85%B6%E5%AD%90%E8%BF%9B%E7%A8%8B%E4%B9%8B%E4%B8%80%E7%9A%84%E8%BF%9B%E7%A8%8B%E7%BB%84%20ID%EF%BC%9F.png)
来自APUE:
进程只能设置其自身或其任何子进程的进程组 ID。此外,在子进程调用 exec 函数之一后,它无法更改其子进程之一的进程组 ID。
为什么它不能“在子进程调用其中一个 exec 函数后更改其子进程之一的进程组 ID”?谢谢。
答案1
我不知道“官方”原因,但我猜测这个想法是进程不必期望其 PGID 突然改变。
因此,在 fork 之后这是允许的,以便可以设置 shell 管道,但在execve()
新的二进制文件找到某个状态之后,这应该是永久的(直到新的二进制文件决定更改它)。