Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 父进程能否确定其子进程是否接收到SIGINT?_Unix_Subprocess_Signals - Fatal编程技术网

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杀死。此外,如果父母去世,孩子也不会变成僵尸。如果一个孩子死了,而他的父母没有获取他的状态信息,他就会变成僵尸