web-dev-qa-db-ja.com

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

iperf -s -Dを使用してiperfをデーモンモードで起動したので、サービスを停止します。 Sudo kill pidを使用しようとしましたが、機能せず、文句もありません。 ps -ef | grep iperfを確認しても、デーモンはまだ実行中です。

Linuxで起動されないため、他のデーモンのようにserviceで見つけることができません。

どうすれば止められますか?

6
steveyang

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を盲目的に使用しないでください。

10
rahmu

このiperfプロセスは「終了」シグナル(kill <pid>コマンドによって送信されるデフォルトのシグナル)に応答していないようです。これは通常、プロセスが何らかの理由でクラッシュしたか、入出力アクセスでスタックしたことを意味します。

あなたはもっと暴力を振るって「殺す」信号を送る必要があるだけです:

kill -9 <pid>

または

kill -KILL <pid>

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

2
Ouki

一般的には推奨されませんが、いつでもkill -9 <pid>を使用してプロセスを強制終了できます。ただし、プロセスを強制的にシャットダウンしていること、つまりnotが正常に終了することを理解してください。

1
asmodai

使用する kill -9 <pid of iperf>プロセスを終了します。シグナル番号が9(KILL)の場合、プロセスはkillをキャッチできません。これを使用して、単純なkillが終了しないプロセスをkillします。

1
harish.venkat

-9オプションを指定してkillコマンドを使用する必要があります。

$ kill -9 pid

SIGKILLシグナルを送信して、すべての最強のシグナルであるプロセスを強制終了します。

0
pradeepchhetri