Unix 父进程能否确定其子进程是否接收到SIGINT?
假设我启动了一个父进程,它启动了一个子进程,但随后父进程收到一个Unix 父进程能否确定其子进程是否接收到SIGINT?,unix,subprocess,signals,Unix,Subprocess,Signals,假设我启动了一个父进程,它启动了一个子进程,但随后父进程收到一个SIGINT。我希望父进程退出,但我不希望子进程停留和/或变成僵尸。我要确保它死了 如果我能确定孩子也收到了一个SIGINT,那么它可能正在自己清理。在这种情况下,我宁愿在它完成并自行退出时短暂等待。但是如果它没有收到一个SIGINT,那么我会立即向它发送一个SIGTERM(或者SIGKILL),并让父级继续进行它自己的清理 我如何判断孩子是否收到了SIGINT?(撇开它甚至可能不响应SIGINT…)我是否需要根据父进程是否在前台进
SIGINT
。我希望父进程退出,但我不希望子进程停留和/或变成僵尸。我要确保它死了
如果我能确定孩子也收到了一个SIGINT
,那么它可能正在自己清理。在这种情况下,我宁愿在它完成并自行退出时短暂等待。但是如果它没有收到一个SIGINT
,那么我会立即向它发送一个SIGTERM
(或者SIGKILL
),并让父级继续进行它自己的清理
我如何判断孩子是否收到了SIGINT
?(撇开它甚至可能不响应SIGINT
…)我是否需要根据父进程是否在前台进程组中运行来猜测?如果SIGINT
是通过编程方式发送的,而不是通过Ctrl+C
我怎样才能知道孩子是否收到了信号
也许你不能。对您来说,重要的是,如果孩子处理了SIGINT
(它可能会忽略它)。注意你的另一个问题
但是,在许多情况下,Ctrl C发送的信号被发送到进程组。那你可能也收到了那个信号
在病理病例中,您的整个系统实验和子进程甚至还没有安排好处理信号
我希望父进程退出,但我不希望子进程停留和/或变成僵尸。我要确保它死了
也许你想在什么地方用
顺便说一句,我不明白你的问题,因为我不得不猜测它的动机。您关心的是作业控制还是实现shell?在哪些具体案例中,您真正关心孩子获得了
SIGINT
,这对您意味着什么?如何完成SIGINT
?Ctrl-C通常用于一个流程组…不清楚的问题。给出一个相关问题(由同一OP提出):否,除非所述SIGINT直接杀死孩子,否则在这种情况下,家长将获得SIGCHLD,并且家长将能够通过waitpid
为孩子接收的状态将指示孩子被SIGINT杀死。此外,如果父母去世,孩子也不会变成僵尸。如果一个孩子死了,而他的父母没有获取他的状态信息,他就会变成僵尸