我有一个父流程( P1 ),它监控子流程( P2 )退出的方式(由于exit()
或由于信号而导致)
使用父级中的status
( P1 )收集儿童( P2 )waitpid()
。
当信号SIGKILL从其他进程( P3 )发送到上方儿童( P2 )时,使用WIFSIGNALED(status)
正确收集儿童的状态父母中的宏( P1 )表示孩子因 SIGNAL 9 而被杀。但是当相同的信号从终端发送到子进程( P2 )时,父进程中的WIFEXITED(status)
宏( P2 )将被触发而不是{{1宏。这导致错误的值(137)。
顺便提一下137-128 = 9这是SIGKILL的价值。为什么bash中的这种行为以及如何获得正确的值?
WIFSIGNALED(status)
这就是孩子//part of parent process(P1)
if(WIFEXITED(status)) // This part getting called if SIGKILL to child is sent from terminal
{
ret = EXIT_SUCCESS;
*pchild_exit_status = WEXITSTATUS(status); //resulting in 137
}
else if(WIFSIGNALED(status)) //when SIGKILL sent from process P3
{
ret = EXIT_SUCCESS;
*pchild_exit_signal = WTERMSIG(status); resulting in 9
}
exec