プロセスを永久に終了しようとするときは、どの「kill」オプションを使用する必要がありますか?

プロセスを永久に終了しようとするときは、どの「kill」オプションを使用する必要がありますか?

私は人々からたくさんのメッセージを受け取りましたが、あなたが実際に使用することにはあまり違いがないのではないかと思います。

kill 'x'
killall 'x'
kill -9 'x'

これまで私はこれらのオプションを使用するように言われましたが、一部の人はkill -9が多すぎるとkill自体が機能しないと言います。

プロセス(およびその状態)を終了するための最も標準的なケースで使用する必要がある提案がある人はいますか?

[編集] 最初から新しいプロセスを実行できるように、プロセスの実行を停止したいときに何を使うべきかを探しています。

答え1

基本的に、プロセスを終了する信号を処理する信号がたくさんあります。最後の終了信号は処理できず、プロセスを終了するしかないため、SIGKILLです。ただし、これは、送信するとプロセスがクリーンアップする機会が拒否されることを意味します。したがって、SIGTERMのように最初に処理できるシグナルを送信し、しばらくしてプロセスが終了しない場合にのみSIGKILLを送信するのが良いエチケットです。

SIGINT と SIGQUIT は、ランダムなプロセス終了には適していません。ターミナルキーボードで作成できるため、多くのアプリケーションで特別な目的に使用されます。たとえば、PythonインタプリタはSIGINTを使用してKeyboardInterrupt例外を生成します(対話型Pythonセッションでもプロンプトに戻ります)、JVMはSIGQUITを使用してスタックトレースをダンプします。 SIGINTとSIGQUITは、ほとんどの標準コマンドラインユーティリティ(たとえば、findまたは)で動作し続けますcat

シャットダウン中、ほとんどのUNIXおよびLinuxシステムはSIGTERMをすべてのプロセスに送信し、5秒待ってからSIGKILLを送信します。これはすべてのプロセスを安全に終了するための推奨方法です。

さらに、SIGKILLでさえ、プロセスが起きるまで中断することなく待機しているプロセスを終了できない可能性があります。

答え2

最も穏やかなものから始めてますます進むべきです。これはSIGINT、SIGTERM、SIGQUIT、SIGKILLを意味します。ほとんどの人はSIGINTとSIGQUITをスキップします。

関連情報