假设,我启动了一个父进程,它启动了一个子进程,但父进程收到了一个SIGINT
。我希望父进程退出,但不希望子进程逗留和/或成为僵尸。我需要确保它死掉。
如果我能确定孩子也收到了SIGINT
,那么它可能正在自行清理。在这种情况下,我更愿意在它完成并自行退出时短暂等待。但如果它没有收到SIGINT
,那么我会立即向它发送SIGTERM
(或SIGKILL
),并让父级继续进行自己的清理。
我该如何判断孩子是否收到了SIGINT
?(抛开它甚至可能不会响应SIGINT
这一事实不谈…)我只需要根据父进程是否在前台进程组中运行来猜测吗?如果SIGINT
是以编程方式发送的,而不是通过Ctrl+C
发送的呢?
如何判断孩子是否收到了SIGINT?
也许你做不到。对你来说,重要的是孩子是否处理了SIGINT
(它本可以忽略它)。看看我对你另一个问题的回答。
然而,在许多情况下,CtrlC发送的信号被发送到进程组。那么你可能也得到了那个信号。
在病理情况下,你的整个系统实验都在颠簸,孩子的过程甚至还没有被安排来处理信号。
我希望父进程退出,但我不希望子进程逗留和/或成为僵尸。我需要确保它死掉。
也许您想使用某处守护程序(3)?
顺便说一句,我不理解你的问题,因为我不得不猜测它(未给定的)动机。你关心工作控制还是实现shell?在哪些具体情况下,你真的关心孩子得了SIGINT
,这对你意味着什么