0

重要的前置知识:我有两个孩子是由原始过程分叉的。子节点只需将两个用户定义的信号(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 时向父级发送信号,但我不确定。

4

0 回答 0