并非所有信号都在c中处理

时间:2017-12-15 18:24:00

标签: c unix signals

我有一个小程序,我正在使用fork创建3个子进程:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

void handler(int signum) {
    printf("SIGNAL ARRIVED\n");
}

int main() {
    signal(SIGTERM, handler);
    pid_t pid;
    pid_t parent = getpid();
    int i;
    for(i = 0; i < 3; i++) {
        pid = fork();
        if(pid == 0) {
        kill(parent, SIGTERM);
        exit(0);
    }
}
    while(wait(NULL) > 0) {}
    exit(0);
}

我的预期输出是三SIGNAL ARRIVED,但有时我只得到两个。{ 为什么会这样,我缺少什么,以及如何实现每次三次?

1 个答案:

答案 0 :(得分:3)

信号没有排队,它们只是标志。向进程发送信号只是设置标志,如果已经设置了标志,则没有其他影响。因此,如果在注意到它们并运行信号处理程序并清除标志之前将多个信号发送到进程,则有些信号似乎会丢失&#34;