有効な場合、SIGSTOP信号

有効な場合、SIGSTOP信号

プロセスが停止した後に信号を受信するとどうなりますかSIGSTOP

私はこれがどのように処理されるかを理解し、明確に理解しようとしています。残念ながら、私が見つけることができるのはシグナルの簡単な説明であり、特定のユースケースに関する詳細はありません。

今まで私が理解したことは、動作しているSIGSTOP間は次のとおりです。

  • SIGKILLプロセスはすぐに終了します。
  • 他の信号は収集され、SIGCONT保留中の信号はその瞬間にすべての信号が送信されたかのようにプロセスから解放されます。
  • 一般に、、SIGCONTssa_maskなどを適用したsa_flags後に集計された信号を処理するときSA_RESTART

たとえば、SIGSTOP-> SIGHUP->SIGCONTシーケンスが存在する場合、afterが受信されるSIGHUPまで処理は保留されますSIGCONT

これが正しいかどうかはわかりません。

私はまだこれらの出来事について知っていません:

  1. 信号が収集される順序はまだ混乱しています。

    例: SIGSTOP-> SIGHUP-> SIGTERM-> SIGCONT: 合計は受信した順序で処理されますかSIGHUP、それともランダムな順序で処理されますか?SIGTERM

  2. SIGSTOP有効期間中に同じ信号が複数回受信されるとどうなりますか?

    SIGSTOP-> SIGHUP-> SIGHUP->SIGCONT

  3. SIGSTOP実行中のシグナルハンドラを停止しますか?信号が処理を待っている場合は、後で続くのですかSIGCONT


これらの同様の質問に対する答えからいくつかの答えを見つけましたが、上記のことについてはまだ明確ではありません。

答え1

SIGSTOP「動作」するものではありません。信号が転送された後、プロセスは停止します。この状態が有効な状態です。この状態のプロセスに対していくつかの信号が生成されると中断される。停止したプロセスに信号を渡すことはできません。処理が再度実行されると、信号処理マスクに従って処理され処理される。信号を無視します。

指定された順序がわからない。リアルタイム信号だけが安定したキュー属性を持ちます。たとえば、POSIXには、「呼び出し後に保留中のブロック解除シグナルがある場合は、sigprocmask()sigprocmask()呼び出しが返される前にこれらのシグナルの少なくとも1つを渡す必要があります」というフレーズが含まれています。どちらが最初に送信されるかは指定しません。

もちろん、いくつかの特別な動作があります。 SIGSTOPによって停止されるとしてもSIGKILLによって終了することを防ぐことはできません。

関連情報