2013-09-02 7 views
10

Ich habe begonnen, nginx und wenn ich wie root stoppenWie töte ich diesen unsterblichen nginx Arbeiter?

/etc/init.d/nginx stop 

nach dem I-Typ

ps aux | grep nginx 

und erhalten Antwort wie tcp LISTEN 2124 nginx WORKER

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

und nachdem ich erneut ein

und erhalten Antwort wie tcp LISTEN 2125 nginx WORKER und so weiter.

Wie tötet man diesen unsterblichen Chuck Norris Arbeiter?

+1

Ich weiß, das ist albern, aber haben Sie versucht, 'sudo Service nginx stop'? –

+0

In meinem Fall hatte ich keine Nginx installiert, gitlab war dafür verantwortlich, die Arbeiter zu spawnen. –

Antwort

4

Nach kill -9 gibt es nichts mehr zu tun - es ist tot (oder verdammt zum sterben). Der Grund dafür ist, dass entweder (a) der Elternprozess noch nicht darauf gewartet hat, also behält der Kernel den Prozesstabelleneintrag, um seinen Status zu behalten, bis der Elternprozess dies tut, oder (b) der Prozess hängt auf einem Systemaufruf in den Kernel, der nicht beendet wird (was normalerweise einen fehlerhaften Treiber und/oder Hardware bedeutet).

Wenn der erste Fall, die Eltern auf das Kind warten, oder das Eltern beenden, sollte funktionieren. Die meisten Programme haben keine klare Möglichkeit, sie "auf ein Kind zu warten", so dass dies keine Option ist.

Im zweiten Fall ist die wahrscheinlichste Lösung ein Neustart. Es kann Werkzeuge geben, die einen solchen Zustand beheben können, aber das ist nicht üblich. Abhängig davon, was genau diese Kernel-Verarbeitung macht, kann es möglich sein, sie auf andere Weise zu entsperren - aber das erfordert Kenntnisse über diese Verarbeitung. Wenn der Prozess beispielsweise bei einer Kernelsperre blockiert wird, die ein anderer Prozess auf unbestimmte Zeit hält, kann das Beenden dieses anderen Prozesses das Problem lindern.

Beachten Sie, dass der Befehl ps diese beiden Zustände ebenfalls unterscheiden kann. Diese erscheinen im 'Z'-Zustand. Weitere Informationen finden Sie auf der ps man-Seite: http://linux.die.net/man/1/ps. Sie können auch mit dem Text "verstorben" angezeigt werden.

0

Ich hatte ähnliches Problem.

Überprüfen Sie, ob Sie einen automatischen Heiler wie Monit oder Supervisor verwenden, der den Arbeiter immer dann startet, wenn Sie versuchen, sie zu stoppen. Wenn Ja Deaktivieren Sie sie.

Meine Mitarbeiter wurden aufgrund von Änderungen hervorgebracht, die ich in update-rc.d in Ubuntu gemacht habe.

So installierte ich sysv-rc-conf, die Kontrolle über eine saubere Schnittstelle gibt, welche Prozesse sind beim Neustart, können Sie von dort aus deaktivieren, und ich versichere Ihnen, kein Chuck Norris Auferstehung: D

0

ich hatte das gleiche Problem. In meinem Fall war gitlab verantwortlich dafür, die nginx-Arbeiter zu bringen. als ich gitlab vollständig von meinem Server entfernte, konnte ich die nginx-Arbeiter töten.

  1. ps -aux | grep "nginx"

  2. Suche für die Arbeiter in der ersten Spalte und überprüfen, wer ihnen bringt.

  3. kill oder unistall die verantwortlich und die Arbeiter wieder töten, werden sie Laichen stoppen; D