SIGINTが停止したプロセスを終了しないのはなぜですか?

SIGINTが停止したプロセスを終了しないのはなぜですか?

~によるとPOSIX規格信号に関して(「標準信号」セクションを参照)、基本的な作業がありますSIGKILLSIGINT学期。ただし、SIGSTOP(または)を介して受信プロセスを停止した場合はそうではありませんSIGTSTP

単純化のために無限ループを持つプログラムを作成するとしましょう。

int main(){
   while(1);
}

コンパイルして実行してみてください。

$ ./program

次にを押して停止CtrlZします。これにより、SIGTSTP信号がプロセスに渡されます。これで、SIGINTプロセスにシグナルを送信してkill -SIGINT pidプロセステーブルを見ると、ps -auxまだ終了していないことがわかります。しかし、送信するとkill -SIGKILL pid終了します。

両方とも同じ基本操作(SIGINT例:SIGKILL学期)?

答え1

SIGKILLデフォルトでは、プロセスは終了してブロックできませんが、デフォルトではプロセスSIGINTは終了しますが、ブロックできます。 ()を使用してCtrlZプロセスをバックグラウンドに移動するため、SIGTSTP信号はブロックされ、SIGINT実行が再開されるまでプロセスに転送されません()。SIGCONT

関連情報