解释信号丢失问题:
阻塞,sigaction 函数有阻塞的功能,比如 SIGINT 信号来了,进入信号处理函数,默认情况下,在信号处理函数未完成之前,如果又来了一个 SIGINT 信号,其将被阻塞,只有信号处理函数处理完毕,才会对后来的 SIGINT 再进行处理,同时后续无论来多少个 SIGINT,仅处理一个 SIGINT,sigaction 会对后续 SIGINT 进行排队合并处理。
原文:https://blog.csdn.net/beginning1126/article/details/8680757
- 连续给一个进程发送多个相同信号时,部分信号丢失而未得到处理(使用 signal 函数处理信号),代码如下:
/* test2.c */
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
// 信号处理函数使用的全局变量
int count_sig = 0;
void handleSig(int);
void main(){
printf("main running...\n");
signal(SIGINT, handleSig);
// 循环等待信号的到来
while(1){
sleep(1);
printf("alive.\n");
}
printf("done.\n");
}
// 信号处理函数
void handleSig(int sig){
sleep(1);
count_sig ++;