如何使用fork()和信号处理程序确定可能的输出

时间:2017-05-10 21:15:57

标签: c exception-handling signals fork control-flow

对于以下代码,可能的输出是ABBCE4E,ABs7E和ABCBs7E。我不确定为什么第一个没有7。当它向孩子发送中断信号时,不会" s"和" 7"被打印?第二,我不明白" s"和" 7"印刷但没有" C"。这是否意味着杀戮信号在它打印出来之前就已经传到了孩子身上?" C"?对于最后一个,我也不确定为什么在任何情况下都会打印4个。

void handler(int sig){
    printf("s");
    exit(7);
}

int forker(int x){
    int pid,status;
    signal(SIGINT, handler);
    printf("A");
    if(x > 0) {
        pid = fork();
        printf("B");
        if(pid == 0) {
            printf("C");
        } else {
            kill(pid,SIGINT);
            waitpid(pid,&status,0);
            printf("%d", WEXITSTATUS(status));
          }
    }
    printf("E");
    exit(4);
}

0 个答案:

没有答案