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 -15
SIGTERM()をプロセスに送信します。 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
で起動を停止するオプションがあります。-D
SIGHUP
ラムの答え):
pkill -HUP iperf3
または
pkill -1 iperf3