重要的预知识:我有两个孩子被原始流程分叉。孩子们只需将两个用户定义的信号之一(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()中出现的print语句最终会停止并且没有输出。我相信这个问题会处理在执行sigHandler时发送给父节点的信号,但我不确定。