我正在编写一个调试实用程序,并且我想要fork
一个孩子,同时防止该孩子的终止触发SIGCHLD
其父母。我仍然希望其他孩子通常会SIGCHLD
在终止时引起 a。
我想这样做是因为我不想fork
触发现有的$SIG{CHLD}
处理程序,但我仍然希望其他孩子触发它。也就是说,我想隔离我的新孩子,我不希望它干扰现有孩子的管理。
我对在本地安装自定义$SIG{CHLD}
处理程序持谨慎态度,因为我认为我无法正确检测何时应该调用原始处理程序。例如,如果我安装了一个本地处理程序,那么一旦我产生一个孩子并让父母终止它,$SIG{CHLD}
我就可以保证收到一个信号。但是,这并不能表明其他孩子是否也终止了,所以我不能确定是否调用原始处理程序。SIGCHLD
waitpid
SIGCHLD
我研究了一个进程不能改变它的父pid。我不确定更改孩子的进程组 ID 或会话 ID 是否有用。
甚至有可能阻止特定的孩子触发SIGCHLD
父母吗?当它收到它没想到的孩子的信号时,我是否被迫依赖现有的$SIG{CHLD}
处理程序来做正确的事情?SIGCHLD
尽管可能有更好的方法来实现该调试实用程序(如果有,请告诉我),但我仍然想知道 POSIX 是否提供对儿童的如此细粒度的控制,并且正在寻找一种 Perl 解决方案来解决我的困境。