重要的前置知识:我有两个孩子是由原始过程分叉的。子节点只需将两个用户定义的信号(SIGUSR1 或 SIGUSR2)之一发送给父节点。
代码构造如下:
if (pid == 0 || second_child == 0) {
/* Just some pseudocode for basic logic */
while (1) {
sleep(2);
kill(parent_pid, SIGUSR1) or kill(parent_pid, SIGUSR2);
}
} else {
while (1) {
struct sigaction psa;
psa.sa_handler = sigHandler;
/* three signals that need to be handled */
sigaction(SIGUSR1, &psa, NULL);
sigaction(SIGUSR2, &psa, NULL);
sigaction(SIGINT, &psa, NULL);
pause();
}
}
sigHandler 方法:
void sigHandler (int sigNum) {
switch(sigNum) {
case SIGUSR1:
//print something using write()
break;
case SIGUSR2:
//print something using write()
break;
default:
exit(0);
}
}
对 sigHandler() 的调用没有按应有的方式发生。sigHandler() 中发生的打印语句最终只是停止并且没有输出。我相信问题涉及在执行 sigHandler 时向父级发送信号,但我不确定。