iperf -s -D
を使用してiperf
をデーモンモードで起動したので、サービスを停止します。 Sudo kill pid
を使用しようとしましたが、機能せず、文句もありません。 ps -ef | grep iperf
を確認しても、デーモンはまだ実行中です。
Linuxで起動されないため、他のデーモンのようにservice
で見つけることができません。
どうすれば止められますか?
kill -9
は使用しないでください。このコマンドは、特定の極端な場合にのみ使用することを目的としています。
(私のSolarisボックスの)manページによると:
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はSIGTERM(kill -15
)をプロセスに送信します。 SIGKILL(kill -9
)よりも暴力的ではない、より攻撃的な信号を送信できます。
なぜ-9を殺さないのですか?
SIGKILLは非常に激しいシグナルです。これは、プロセスによってキャッチすることはできません。つまり、それを受け取るプロセスは、すべてを即座にドロップして終了する必要があります。ロックしたリソース(ネットワークソケットやファイルなど)を解放したり、他のプロセスに終了を通知したりするのに時間がかかりません。多くの場合、マシンが不安定な状態になります。類推すると、SIGKILLでプロセスを強制終了することは、(shutdown
コマンドではなく)電源ボタンでマシンをオフにするのと同じくらい悪いことだと言えます。
事実、SIGKILLは できる限り回避 にする必要があります。代わりに、記事で述べたように、kill -2
を試してみて、それが機能しない場合はkill -1
を使用することをお勧めします。
いつもSIGKILLを送信する人が急増しているのを見てきました(毎日のクリーンアップスクリプトでも!)。私は毎日これについてチームメイトと戦います。 kill -9
を盲目的に使用しないでください。
このiperf
プロセスは「終了」シグナル(kill <pid>
コマンドによって送信されるデフォルトのシグナル)に応答していないようです。これは通常、プロセスが何らかの理由でクラッシュしたか、入出力アクセスでスタックしたことを意味します。
あなたはもっと暴力を振るって「殺す」信号を送る必要があるだけです:
kill -9 <pid>
または
kill -KILL <pid>
これにより、プロセスが適切に終了するのを待たずにプロセスが終了します。
一般的には推奨されませんが、いつでもkill -9 <pid>
を使用してプロセスを強制終了できます。ただし、プロセスを強制的にシャットダウンしていること、つまりnotが正常に終了することを理解してください。
使用する kill -9 <pid of iperf>
プロセスを終了します。シグナル番号が9(KILL)の場合、プロセスはkillをキャッチできません。これを使用して、単純なkillが終了しないプロセスをkillします。
-9オプションを指定してkillコマンドを使用する必要があります。
$ kill -9 pid
SIGKILLシグナルを送信して、すべての最強のシグナルであるプロセスを強制終了します。