如果我发送多个后续Hangup
信号,下面的程序,只有他们两个人会被处理,其余的将被忽略:如何捕捉两个以上的连续信号?
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
int id;
void handler(int s)
{
id++;
int i;
for(i=0; i<3; i++)
{
printf("Sig %d\n", id);
sleep(2);
}
}
int main()
{
int i;
signal(SIGHUP, handler);
for(i=0; ; i++)
{
printf("%d\n", i);
sleep(1);
}
return 0;
}
我用下面的命令来发送信号到进程:
kill -l {#process}
如果我运行上述命令连续三次,第三信号将被忽略,因为在下面的输出:
0
1
2
3
4
5
6
7
Sig 1
Sig 1
Sig 1
Sig 2
Sig 2
Sig 2
8
9
10
11
12
有什么方法可以捕捉到第三个信号?
睡在一个信号处理程序是值得怀疑的。它必须在那里吗? – wallyk 2011-12-28 08:40:06
@wallyk根据手册页面,POSIX.1-2004要求在信号处理程序中保证'sleep'的安全。 – 2011-12-28 08:45:05
正常信号不排队,无论您做什么,都会错过一些信号。 – nos 2011-12-28 09:03:27