gpt4 book ai didi

c - 并非每个信号都在 c 中处理

转载 作者:太空宇宙 更新时间:2023-11-04 06:53:36 27 4
gpt4 key购买 nike

我有一个小的 c 程序,我正在使用 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,但有时我只得到两个。这是为什么,我错过了什么,我怎样才能做到每次三分?

最佳答案

信号没有排队,它们只是标志。向进程发送信号只是设置标志,如果标志已经设置,则没有额外的效果。因此,如果在进程注意到多个信号并运行信号处理程序并清除标志之前将多个信号发送到进程,有些信号似乎会“丢失”

关于c - 并非每个信号都在 c 中处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47837910/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com