轻松放弃exec上的孩子

时间:2013-11-27 07:50:21

标签: unix exec

exec新过程图像之前,是否有一种简单,标准的方法可以放弃所有孩子?与在exec上设置文件描述符关闭类似,最好让所有的孩子都被init采用。您可以忽略SIGCHLD(在某些平台上)会对提出的问题here提供部分解决方案,但这肯定不可移植。我没有真正看到这种行为的用例,但我很想知道是否有标准机制。

1 个答案:

答案 0 :(得分:0)

这是一个非常有趣的问题。

exec(并且我认为待处理的信号被清除)时,信号处理程序本身被设置回智能默认值,但您仍然是层次结构中的相同进程ID(PID),因此您仍然拥有正在运行的孩子。

这意味着未来的SIGCHLD信号将随着这些孩子退出而找到他们的路。

避免这种情况的一种方法是,而不是exec执行偷偷摸摸的切换器。我的意思是,fork首先,然后让父进程退出(所以当前的子进程被init采用)。

fork产生的子进程具有完全不同的PID,因此在该点与其他子进程只有兄弟关系。它可以exec你的新程序继续进行,知识安全,没有孩子。