从bash发送信号时,错误的信号值返回到父级

时间:2014-07-24 08:05:53

标签: c linux bash

我有一个父流程( 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

0 个答案:

没有答案