假设我启动了一个父进程,它启动了一个子进程,但父进程收到SIGINT
。我希望父母退出,但我不希望孩子进程流连忘返和/或变成僵尸。我需要确保它死了。
如果我可以确定孩子还收到SIGINT
,那么它可能会自行清理。在这种情况下,我宁愿等待它完成并自行退出。但如果它没有收到SIGINT
,那么我会立即发送SIGTERM
(或SIGKILL
)并让父母自行进行清理。
我如何判断孩子是否收到了SIGINT
? (暂不说它甚至可能不响应SIGINT
...)我是否只需要猜测,根据父进程是否在前台进程组中运行?如果SIGINT
是以编程方式发送的,而不是通过Ctrl+C
发送的,该怎么办?
答案 0 :(得分:0)
如何判断孩子是否收到了SIGINT?
也许你不能。对你来说重要的是如果孩子处理 SIGINT
(它本可以忽略它)。请参阅my answer您的其他问题。
但是,在许多情况下, Ctrl C 发送的信号被发送到进程组。然后你也可能得到那个信号。
在病态情况下,您的整个系统都会进行thrashing实验,而子进程甚至尚未安排处理信号。
我希望家长退出,但我不希望孩子进程徘徊和/或变成僵尸。我需要确保它死了。
也许你想在某处daemon(3)使用?
顺便说一句,我不明白你的问题,因为我必须猜测它的(ungiven)动机。您是否关心工作控制或实施shell?在具体的情况下,你真的关心孩子得到了SIGINT
这对你意味着什么?