如果我發送多個後續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