SIGINT
シグナルとシグナルの違いは何SIGTERM
ですか?SIGINT
キーボードで Ctrl+C を押すのと同じことはわかっていますが、何SIGTERM
のためにあるのでしょうか? バックグラウンド プロセスを正常に停止したい場合、これらのうちどれを使用すればよいですか?
3 に答える
応答の唯一の違いは、開発者次第です。SIGTERM
開発者がアプリケーションに とは異なる応答をさせたい場合はSIGINT
、異なるハンドラーが登録されます。バックグラウンド プロセスを適切に停止したい場合は、通常、SIGTERM
. アプリケーションを開発している場合は、SIGTERM
正常に終了して応答する必要があります。 SIGINT
多くの場合、同じ方法で処理されますが、常にではありません。たとえば、SIGINT
ステータスや部分的な計算を報告することで応答すると便利なことがよくあります。SIGTERM
これにより、端末でアプリケーションを実行しているユーザーが部分的な結果を取得するのは簡単になりますが、通常、ユーザーは別のシェルを開いて経由を送信する必要があるため、プログラムを終了するのは少し難しくなります。kill
. つまり、アプリケーションによって異なりますが、SIGTERM
正常にシャットダウンすることで応答するのが規則であり、両方のシグナルのデフォルト アクションは終了であり、ほとんどのアプリケーションはSIGINT
正常に停止することで応答します。
バックグラウンド プロセスを正常に停止したい場合、これらのうちどれを使用すればよいですか?
Unix の信号リストは、コンピュータにシリアル端末とモデムがあった時代にさかのぼります。ここで、制御端末の概念が生まれました。モデムがキャリアを切断すると、回線が切断されます。
したがって、SIGHUP(1) は接続が失われたことを示し、プログラムを強制的に終了または再起動させます。syslogdやsshdなどのデーモン(端末接続を持たないプロセス) の場合、実行を継続する必要があるため、SIGHUP は通常、再起動またはリセットに使用されるシグナルです。
SIGINT(2) と SIGQUIT(3) は文字通り「中断」または「終了」、「キーボードから」であり、プログラムが混乱した場合にユーザーが即座に制御できるようにします。物理的な文字ベースの端末では、これがプログラムを停止する唯一の方法です!
SIGTERM(15) は端末処理とは関係なく、別のプロセスからのみ送信できます。これは、バックグラウンド プロセスに送信する従来のシグナルです。