私は、C for Linuxで信号処理を示す簡単なプログラムを持っています。私は実験のためにそれを複雑...Linux:シグナルハンドラ内のシグナルを無視し、そのような連続するシグナルをすべて無視する
void sigquit(int signo)
{
printf("Recieved signo : %d\n",signo);
signal(SIGQUIT,SIG_IGN);
}
int main()
{
/* register the signal handler */
if(signal(SIGQUIT,sigquit) == SIG_ERR)
{
perror("Error handling SIGQUIT signal");
exit(1);
}
for(;;);
return 0;
}
私は、出力取得しています:私は期待していたのに対し、
^\Recieved signo : 3
^\^\^\^\^\^\^\
をこの:
^\Recieved signo : 3
^\Recieved signo : 3
^\Recieved signo : 3
^\Recieved signo : 3
なぜ私のハンドラが呼び出された初回のみとそれ以上はない。私は信号がメインスレッドに来てからハンドラに渡されることを期待していました。シグナル(SIGQUIT、SIG_IGN);
だから、この行の背後にある 'signal(SIGQUIT、SIG_IGN);という考えはどうですか? ;-) – alk