2013-09-02 1 views
10

私はnginxの始めていると私は根その後この不滅のnginxワーカーを殺すには?

/etc/init.d/nginx stop 

のように停止したとき、私は

ps aux | grep nginx 

を入力してtcp LISTEN 2124 nginx WORKER

kill -9 2124 # tried with kill -QUIT 2124, kill -KILL 2124 

と私は

もう一度入力した後のような応答を取得
ps aux | grep nginx 

となり、tcp LISTEN 2125 nginx WORKER のような応答が得られます。

この不滅のチャックノリスの労働者を殺すには?

+1

私はこれが愚かである知っているが、あなたは、 'sudoのサービスnginxののstop'を試してみたのですか? –

+0

私の場合、nginxはインストールされていませんでしたが、gitlabはワーカーを生成する責任がありました。 –

答えて

4

kill -9の後には、それ以上の処理はありません。それは死んでいる(または死ぬことになります)。それが固執する理由は、(a)親プロセスがそれをまだ待っていないため、カーネルがプロセステーブルのエントリを保持して親がそうするまでステータスを維持するか、(b)プロセスがシステムコールを終了していないカーネル(通常はバグのあるドライバやハードウェアを意味します)に呼び出します。

最初のケースでは、親を取得して子を待つか、親を終了する必要があります。ほとんどのプログラムでは、「子供を待つ」という明確な方法がないため、オプションではない可能性があります。

2番目のケースでは、最も可能性の高い解決方法は再起動です。このような状態を解消するツールがあるかもしれませんが、それは一般的ではありません。カーネルの処理が何をしているのかによって、他の手段でブロックを解除することも可能ですが、その処理の知識が必要です。たとえば、プロセスがカーネルロックでブロックされていて、他のプロセスが何らかの理由で無期限に保持されている場合、その他のプロセスを終了すると問題が解決される可能性があります。

psコマンドは、これらの2つの状態も区別できることに注意してください。これらは「Z」状態で表示されます。詳細については、psマニュアルページを参照してください:http://linux.die.net/man/1/ps。彼らはまた、 "存在しない"というテキストで表示されるかもしれません。

0

私は同様の問題を抱えていました。

MonitまたはSupervisorのような自動ヒーラーを使用しているかどうかを確認してください。はいの場合は無効にします。

Ubuntuのupdate-rc.dで行った変更が忘れられたため、私のワーカーが産んでいました。

は、だから私は、あなたがそこから無効にすることができプロセスが再起動時に何であるかのクリーンなインターフェイスを制御できます sysv-rc-confをインストールし、私はあなたに何のチャック・ノリスの復活を保証しません:D

0

私は同じ問題がありました。 私の場合、gitlabはnginxワーカーを雇う責任がありました。 私は私のサーバからgitlabを完全に削除したので、nginxワーカーを殺すことができました。

  1. ps -aux | grep "nginx"

  2. 労働者を検索し、それらをもたらしている最初の列で確認してください。

  3. キルや責任をアンインストールして、再度労働者を殺し、彼らは産卵を停止します。D

関連する問題