プログラムがSIGINT信号を傍受し、内部的に処理し、無視する正当な理由

プログラムがSIGINT信号を傍受し、内部的に処理し、無視する正当な理由

また、プログラムはIPC信号を傍受し、内部ハンドラを実行して基本ハンドラの操作をバイパスすることができることを知っていSIGKILLますSIGSTOP

私は信号を使用してこれを行う必要がある少なくとも1つの良い理由を考えることができますSIGINT

  • つまり、プロセスを終了する基本的なシグナル操作に戻る前に、最後のバックアップを実行したり、メモリダンプを保存したり、ログに書き込む信号ハンドラを実装したりします。

また、マルウェアがSIGINTを捕捉してブロックする1つの妥当な理由を考えることができます。

  • つまり、プロセスの実行時間を延長します。ほとんどのユーザーにとって、Ctrl+はほとんどのエンドユーザーのためのキーボードショートカットです。コアを送信して生成する+だけでなく、+(プロセスを停止して端末に残っている)Cについて知らない人がたくさんいます。店舗を譲渡します。CtrlZSIGTSTPjobsCtrl\SIGQUIT

  • Ctrl+がキャプチャされブロックされている場合、Cそのユーザーは別のターミナルウィンドウを開き、次を実行しようとする可能性があります。

    ps aux | grep [process name]
    

    プロセスPIDを取得し、SIGKILLを実行します。

    kill -9 [$PID]
    
  • 同様に、リモートシステムのターミナルセッションに接続されているユーザーは、新しいターミナルセッションへの2番目の接続を確立しようとし、同様のプロセス/ PID検索を介して犯人を終了します。明らかに、この戦略は短時間だけプロセスランタイムを延長することができますが、10 MB / sの高帯域幅接続を使用してファイルを3分以上転送しても、ほぼ2 GBの追加データが転送されるため、間違いなく利点があります。それ。 。

しかし最近、私はいくつかのプログラムが他のサブセットに属しているように見えることを発見しました。おそらく私はそれに興味を持ち始めたからです。

  • これらのプログラムはオープンソースであり、パッケージは十分にメンテナンスされ検査され、主要なマルウェアが隠れる可能性はほとんどありません。

  • vim他のテキストエディタのようにキーボード入力を制御しません。

  • SIGINTをキャプチャして完全に無視する内部ハンドラがあります。最終的なプロセスの終了はなく、我々が知っている限り、最終的に重要な作業は試みられません。

私の質問:

  • プロセスが合法的な目的のためにSIGINTを傍受しますが、完全に廃棄することを選択できる理由はありますか?

  • つまり、SIGINTをキャプチャして無視することが既知の基本操作(実行中のプロセスの終了)よりも有利な妥当な理由(コードまたはシステムの観点から)または状況がありますか?

ベストアンサー1

発見したように、プログラムがSIGINTを無視する最も可能性の高い理由はエラーです。正しく機能するプログラムは信号を尊重しなければなりません。通常SIGINT は「終了」を意味しますが、必須の動作ではありません。プログラムには、独自の目的でSIGINTを使用する権利があります。同様に、多くのプログラム(通常デーモン)は、SIGHUPを使用して「制御端末が中断されました」ではなく、「構成ファイルを再ロード中」を意味します。

  • 長期実行プログラムまたはデーモンは、SIGINT を使用して「割り込み」を示すことができます。現在の私がやっていることを確認して、次の作業に進んでください。」
  • イベントを待つプログラムは、SIGINTを使用して「[イベント]の待機を停止して続行する」ことを意味できます(SIGTERMは、「[イベント]の待機を停止して終了する」ことを意味します)。
  • 信号はしばしば複数のプロセスに送られる。プログラムは、意図した受信者ではないと信じる理由がある場合は無視できます。
  • プログラムは、自分がユーザーよりもよく知っていると(正確にまたは不正確に)信じて、実行中の作業を続けるために割り込みやその他のオプションの信号を無視することができます。たとえば、ディスクリカバリプロセスなどの重要なタスクは、停止要求の途中でユーザーを合法的に無視する可能性があります。 。

もちろん、プログラムに関係なくしなければならないこのため、SIGINTを異なる方法で処理することは議論の余地があります。これは、プログラムがすぐに終了することを期待しているユーザーを驚かせたり混乱させたりする可能性があります。したがって、SIGINTを特別な方法で処理することを考慮して正しく動作するプログラムは、この動作が(ほとんどの)ユーザーにとって意味があることを保証する必要があります。

この記事(リンクからウィキペディア)、SIGINT、適切な処理について詳しく説明し、SIGINT処理を実装する際に考慮すべきいくつかの極端なケースについて説明します。

おすすめ記事