在exec
新过程图像之前,是否有一种简单,标准的方法可以放弃所有孩子?与在exec上设置文件描述符关闭类似,最好让所有的孩子都被init采用。您可以忽略SIGCHLD(在某些平台上)会对提出的问题here提供部分解决方案,但这肯定不可移植。我没有真正看到这种行为的用例,但我很想知道是否有标准机制。
答案 0 :(得分:0)
这是一个非常有趣的问题。
当exec
(并且我认为待处理的信号被清除)时,信号处理程序本身被设置回智能默认值,但您仍然是层次结构中的相同进程ID(PID),因此您仍然拥有正在运行的孩子。
这意味着未来的SIGCHLD信号将随着这些孩子退出而找到他们的路。
避免这种情况的一种方法是,而不是exec
执行偷偷摸摸的切换器。我的意思是,fork
首先,然后让父进程退出(所以当前的子进程被init
采用)。
由fork
产生的子进程具有完全不同的PID,因此在该点与其他子进程只有兄弟关系。它可以exec
你的新程序继续进行,知识安全,没有孩子。