私は、次のプログラムに複数のその後のHangup
信号を送信する場合、それらの2つだけが処理されると、残りは無視されます。2つ以上の連続した信号を捕捉するには?
#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}
私は3回連続して上記のコマンドを実行した場合、第三信号は、以下の出力のように無視されます。
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
第3の信号も捕まえる方法はありますか?
シグナルハンドラ内でスリープ状態になることは疑わしいです。それはそこになければなりませんか? – wallyk
@wallykマニュアルページによると、POSIX.1-2004では、シグナルハンドラ内で安全にsleepする必要があります。 –
通常のシグナルはキューに入れられません。 – nos