父进程能否确定其子进程是否已接收到SIGINT



假设,我启动了一个父进程,它启动了一个子进程,但父进程收到了一个SIGINT。我希望父进程退出,但不希望子进程逗留和/或成为僵尸。我需要确保它死掉。

如果我能确定孩子也收到了SIGINT,那么它可能正在自行清理。在这种情况下,我更愿意在它完成并自行退出时短暂等待。但如果它没有收到SIGINT,那么我会立即向它发送SIGTERM(或SIGKILL),并让父级继续进行自己的清理。

我该如何判断孩子是否收到了SIGINT?(抛开它甚至可能不会响应SIGINT这一事实不谈…)我只需要根据父进程是否在前台进程组中运行来猜测吗?如果SIGINT是以编程方式发送的,而不是通过Ctrl+C发送的呢?

如何判断孩子是否收到了SIGINT?

也许你做不到。对你来说,重要的是孩子是否处理了SIGINT(它本可以忽略它)。看看我对你另一个问题的回答。

然而,在许多情况下,CtrlC发送的信号被发送到进程组。那么你可能也得到了那个信号。

在病理情况下,你的整个系统实验都在颠簸,孩子的过程甚至还没有被安排来处理信号。

我希望父进程退出,但我不希望子进程逗留和/或成为僵尸。我需要确保它死掉。

也许您想使用某处守护程序(3)?

顺便说一句,我不理解你的问题,因为我不得不猜测它(未给定的)动机。你关心工作控制还是实现shell?在哪些具体情况下,你真的关心孩子得了SIGINT,这对你意味着什么

最新更新