父进程可以确定其子进程是否已收到SIGINT?

时间:2017-11-10 15:42:42

标签: unix subprocess signals

假设我启动了一个父进程,它启动了一个子进程,但父进程收到SIGINT。我希望父母退出,但我不希望孩子进程流连忘返和/或变成僵尸。我需要确保它死了。

如果我可以确定孩子还收到SIGINT,那么它可能会自行清理。在这种情况下,我宁愿等待它完成并自行退出。但如果它没有收到SIGINT,那么我会立即发送SIGTERM(或SIGKILL)并让父母自行进行清理。

我如何判断孩子是否收到了SIGINT? (暂不说它甚至可能不响应SIGINT ...)我是否只需要猜测,根据父进程是否在前台进程组中运行?如果SIGINT是以编程方式发送的,而不是通过Ctrl+C发送的,该怎么办?

1 个答案:

答案 0 :(得分:0)

  

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

也许你不能。对你来说重要的是如果孩子处理 SIGINT(它本可以忽略它)。请参阅my answer您的其他问题。

但是,在许多情况下, Ctrl C 发送的信号被发送到进程组。然后你也可能得到那个信号。

在病态情况下,您的整个系统都会进行thrashing实验,而子进程甚至尚未安排处理信号。

  

我希望家长退出,但我不希望孩子进程徘徊和/或变成僵尸。我需要确保它死了。

也许你想在某处daemon(3)使用?

顺便说一句,我不明白你的问题,因为我必须猜测它的(ungiven)动机。您是否关心工作控制或实施shell?在具体的情况下,你真的关心孩子得到了SIGINT这对你意味着什么?