デーモンとして実行されているプログラムを停止する方法

デーモンとして実行されているプログラムを停止する方法

iperfデーモンモードで起動しましたが、今iperf -s -Dサービスを停止したいです。試してみましたが、うまくsudo kill pidいっても文句もありません。確認してみると、デーモンはまだ実行中でしたps -ef | grep iperf

Linuxで起動するわけではないので、service他のデーモンのように見つけることはできません。

どうやって防ぐことができますか?

答え1

使用しないでくださいkill -9!このコマンドは、特定の極端な状況でのみ適用されます。

マニュアルページによると(私のSolarisシステムの場合):

DESCRIPTION
 The kill utility sends a signal to the process or  processes
 specified by each pid operand.

 For each pid operand, the kill utility will perform  actions
 equivalent to the kill(2) function called with the following
 arguments:

 1.  The value of the pid operand will be  used  as  the  pid
     argument.

 2.  The sig argument  is  the  value  specified  by  the  -s
     option,  the  -signal_name option, or the -signal_number
     option, or, if none of these options  is  specified,  by
     SIGTERM.

 The signaled process must belong to the current user  unless
 the user is the super-user.

シグナルを指定しないと、killはkill -15SIGTERM()をプロセスに送信します。 SIGKILL()よりも暴力的な信号を送ることができますkill -9

なぜkill -9を避けるべきですか?

SIGKILLは非常に暴力的な信号です。プロセスはこれを捕捉できません。つまり、これを受け取るプロセスは、すぐにすべてを破棄して終了する必要があることを意味します。ロックされたリソース(ネットワークソケットやファイルなど)を解放するのに時間を費やす必要はなく、他のプロセスに終了を通知する必要もありません。コンピュータが不安定な状態になることがよくあります。例えば、SIGKILLを使用してプロセスを終了することは、(コマンドの代わりに)電源ボタンを使用してコンピュータをシャットダウンするのと同じくらい悪いと言えますshutdown

実際、SIGKILLは次のようになります。できるだけ避けてください。代わりに、記事で述べたようにkill -2それでも機能しない場合は試してみることをお勧めしますkill -1

私は人々がいつもSIGKILLを送りたいのを見ました(毎日のクリーンアップスクリプトでも!)。私は毎日その問題でチームメンバーと議論をしています。kill -9盲目的に使用しないでください。

答え2

iperfこれは、「終了」信号(kill <pid>コマンドから送信された基本信号)に応答しないようです。これは通常、何らかの理由でプロセスがクラッシュしたか、入力/出力アクセスが中断されたことを意味します。

もっと暴力的に「KILL」信号を送ればいいのです。

kill -9 <pid>

または

kill -KILL <pid>

これにより、プロセスが正しく完了するのを待たずにプロセスが終了します。

答え3

通常はお勧めできませんが、いつでもkill -9 <pid>実際にプロセスを終了できます。しかし、プロセスを強制終了することを理解することが重要です。いいえエレガントに終了します。

答え4

提案されたシグナル番号1などのシグナルを送信し、デーモンモードiperf3で起動を停止するオプションがあります。-DSIGHUPラムの答え):

pkill -HUP iperf3

または

pkill -1 iperf3

関連情報