从子级到父级和sigaction的异步信号()

时间:2013-01-30 01:41:12

标签: c unix signals posix

重要的预知识:我有两个孩子被原始流程分叉。孩子们只需将两个用户定义的信号之一(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时发送给父节点的信号,但我不确定。

0 个答案:

没有答案