プロセスは別のプロセスにシグナルを送ることができます。プロセスは、シグナルを処理する独自のシグナル ハンドラを登録できます。SIGKILL と SIGSTOP は、キャプチャできない 2 つのシグナルです。
プロセスがシグナル ハンドラを実行すると、同じシグナルがブロックされます。つまり、シグナル ハンドラが実行されているときに、別の同じシグナルが到着した場合、シグナル ハンドラは呼び出されません [シグナルをブロックすると呼ばれる]。到着しました[つまり、保留中の信号]。すでに実行中のシグナルハンドラが実行されると、保留中のシグナルが処理されます。保留中のシグナルを実行したくない場合は、シグナルを無視できます。
上記の概念の問題は次のとおりです。
以下を想定してください: プロセス A は SIGUSR1 のシグナルハンドラを登録しています。
1) process A gets signal SIGUSR1, and executes signalhandler()
2) process A gets SIGUSR1,
3) process A gets SIGUSR1,
4) process A gets SIGUSR1,
ステップ(2)が発生すると、「保留シグナル」になりますか。すなわち; 提供する必要があります。そして、ステップ (3) が発生すると、使用可能な信号ごとに保留中の信号を示すために使用できるビットが 1 つしかないため、無視されます。
このような問題を回避するには、つまり、シグナルを失いたくない場合は、リアルタイムシグナルを使用できます。
2) シグナルは同期的に実行されます。
例えば。、
1) process is executing in the middle of signal handler for SIGUSR1,
2) Now, it gets another signal SIGUSR2,
3) It stops the SIGUSR1, and continues with SIGUSR2,
and once it is done with SIGUSR2, then it continues with SIGUSR1.
3)IMHO、プロセスにシグナルが到着したかどうかを確認することについて私が覚えていることは次のとおりです。
1) When context switch happens.
これがある程度役立つことを願っています。