シングルスレッドプロセスを使用していて、関連するシグナルがブロックまたは無視されていないことを前提とすると、次のことが保証されます。
kill(getpid(), sig);
次のコード行が実行される前に信号が配信されますか?
特に、シグナルがハンドラーがなく、デフォルトのアクション全体がプロセスを終了することである場合(SIGTERM、SIGALRMなど)、コードの次の行が実行されないことが保証されていますか?
私は常に(少なくともLinuxでは)答えは「はい」だと思っていました。なぜなら、システムコールから戻る前に、カーネルは保留中のシグナルがあるかどうかを常にチェックし、ある場合はそれらを配信すると思っていたからです。しかし、(高負荷のマルチコアシステムで実行した場合)これが常に当てはまるとは限りませんが、再現するのは非常に難しいので、何も表示されていないことを確認していただければ幸いです。
[この質問は、killを使用して親スレッドに送信されるシグナルは、次のステートメントの前に処理されることが保証されていますか?と非常によく似ています。ただし、その質問はマルチスレッドプロセス(答えは間違いなく「いいえ」)について尋ねていましたが、この質問はシングルスレッドプロセスに関するものです。]