おすすめの方法を知っています。終了フォアグラウンドプロセスは、SIGTERM
プロセス自体にリソースを整理/解除する機会を提供するため、シグナルを介して実行されます。信号はコマンドによってのみ生成/送信でき、kill
pkill
killall
ここまでできたすべてのコマンドによって生成/送信できます。しかも、それ基本これらのコマンドの信号です。
今私はSIGINT
信号を知っています邪魔するプロセス。したがって、「似ています」終了。
しかし、私は次の答え(抜粋)を読みました。
SIGINT
そしてSIGQUIT
目標は具体的に~のため端末からの要求:これらの信号を生成するために特定の入力文字を指定できます(端末制御設定によって異なります)。基本ジョブは、基本ジョブと変更できないジョブとSIGINT
同じ種類のプロセス出口です。SIGTERM
SIGKILL
これまでは、回答に従ってキーの組み合わせ(+)でSIGINT
トリガーされます。ctrlcそして 理論的に SIGINT
同じことを行うには、SIGTERM
次の手順を実行します。プログラム自体にリソースを整理/解除する機会を提供する。
正直なところ、多くのチュートリアルを読んだ後でも、この情報を明確に見つけて確認することはできません。たとえば、次に由来します。
さまざまな場所でこの信号を使用してください邪魔するそして終了お尻。
しかも同じ答えによると、@JonathanLefler~のコメント(抜粋)は以下の通りです。
これが重要です:プログラムの実行中に単一文字を使用して端末で生成できます
SIGINT
。SIGQUIT
他の信号は、他のプログラムによって何らかの形で生成されなければなりません(たとえば、コマンドを介してkill
)。SIGINT
あまり暴力的ではありませんSIGQUIT
。コアダンプ
これまでに考えられる結論の1つは、SIGINT
キーの組み合わせまたはコマンドでのみトリガーできることですSIGTERM
。
公開理由:そうであれば理論的に SIGINT
そしてSIGTERM
質問
- いつ
SIGINT
プログラムで送信する必要がありますか?
に表示されますのでkill -l
使用してください。
その他の質問
また、理論的に SIGINT
- と同じ効果があり、SIGTERM
どちらも無視/遮断/処理できます。
- なぜ作られたのです
SIGINT
か? - ctrl+が最初から割り当てられていないのはなぜcですか
SIGTERM
?
正直そうSIGINT
だと思いました。いいえそのまま安全邪魔するしたがって、このプロセスでは、一部のデータは一貫性のない/完全な状態のままになります。
ベストアンサー1
これ基本動作そしてSIGINT
(SIGTERM
他の多くの信号と同様に)プロセスを終了するために使用されます。これは、例えば文書化されている。Linuxのマニュアルページsignal(7)
、「標準信号」の下の表を参照してください。そのうちのいくつかは以下に引用されています。実際にも同じだ。
テーブルの一部:
Signal Standard Action Comment ──────────────────────────────────────────────────────────────────────── SIGHUP P1990 Term Hangup detected on controlling terminal or death of controlling process SIGINT P1990 Term Interrupt from keyboard SIGKILL P1990 Term Kill signal SIGTERM P1990 Term Termination signal
さて、これは基本動作。ほとんどの信号に対してこれを受信するプログラムは、信号処理機能を事前に設定して、それをキャプチャしたり完全に無視したりできます。SIGINT
通常、ユーザーがCtrl-Cを押してaを送信し、SIGTERM
受信プログラムを終了する必要がある他のプログラムから送信することが多いことを知っている場合、プログラムはそれを別の方法で処理することを決定できます。
インタラクティブプログラムは、すぐに終了せずにすべての長期実行ジョブを終了することを決定し、ユーザーが終了するか、SIGINT
他のタスクを実行するかを選択できます。まだ終了中SIGTERM
。これにより、より単純なプログラムには、すべてのSIGHUP
データを保存して終了する同じハンドラ(たとえば、他のハンドラもあります)があります。
たとえば、Debian で試した対話型 Bash シェルは、何も実行せずにSIGINT
現在のコマンドラインを消去します。 (SIGTERM
少し驚くべきことですが、これはプロセスグループ全体にシグナルを送信することに関連している可能性があります。)これは、ターミナル接続が消えることを意味するSIGHUP
のでSIGHUP
、より多くのコマンドを読んでも役に立ちません。
ほとんどの信号は、受信プロセスが(潜在的に)終了する前にクリーンアップ操作を実行できるようにします。 2つの異常信号は次のSIGKILL
とおりSIGSTOP
です。できないキャッチまたは無視されますが、クリーンアップ操作を実行せずに、無条件に即座にプロセスを破壊または停止します。 (カーネルは依然としてオペレーティングシステムリソースに対して必要なクリーンアップを実行しますが、ここではクリーンアップはプロセスメモリに保存されていないデータに関するものです。)
もちろん、基本的にプロセスを終了する他の信号もあります。同様にSIGALRM
、システムコールによって設定されたタイマーによって送信されますalarm()
。デフォルトの動作はいくつかの状況で役に立ちますが、プログラムに特定の定期的なタスクを実行するように指示するなど、一般的な目覚まし時計として便利です。