2013-09-02 7 views
10

zacząłem nginx i kiedy przestać jak korzeńJak zabić tego nieśmiertelnego pracownika nginx?

/etc/init.d/nginx stop 

Potem typu

ps aux | grep nginx 

i uzyskać odpowiedź jak tcp LISTEN 2124 nginx WORKER

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

i po wpisaniu ponownie

ps aux | grep nginx 

i uzyskaj odpowiedź, taką jak tcp LISTEN 2125 nginx WORKER i tak dalej.

Jak zabić tego nieśmiertelnego pracownika Chucka Norrisa?

+1

Wiem, że to głupie, ale nie spróbujesz 'sudo service stop' nginx? –

+0

W moim przypadku nie miałem zainstalowanego nginx, gitlab był odpowiedzialny za odrodzenie pracowników. –

Odpowiedz

4

Po kill -9 nie ma nic więcej do roboty - jest martwy (lub skazany na śmierć). Powodem tego jest to, że albo (a) proces nadrzędny jeszcze na niego nie czekał, więc jądro przechowuje wpis w tablicy procesu, aby zachować jego status, dopóki rodzic tego nie zrobi, lub (b) proces utknął na wywołanie systemowe do jądra, które się nie kończy (co zwykle oznacza błędny sterownik i/lub sprzęt).

Jeśli pierwszy przypadek, nakazanie rodzicowi oczekiwanie na dziecko lub zakończenie rodzica, powinien zadziałać. Większość programów nie ma jasnego sposobu, aby je "czekać na dziecko", więc może nie być opcją.

W drugim przypadku najbardziej prawdopodobnym rozwiązaniem jest ponowne uruchomienie komputera. Mogą istnieć narzędzia, które mogą usunąć taki stan, ale nie jest to częste. W zależności od tego, co robi to przetwarzanie jądra, możliwe jest odblokowanie go w inny sposób - ale wymaga to wiedzy o tym przetwarzaniu. Na przykład, jeśli proces jest zablokowany na blokadzie jądra, że ​​jakiś inny proces w jakiś sposób utrzymuje się w nieskończoność, zakończenie tego procesu może rozwiązać problem.

Należy zauważyć, że polecenie ps może również rozróżnić te dwa stany. Pojawiają się one w stanie "Z". Zobacz stronę podręcznika ps, aby uzyskać więcej informacji: http://linux.die.net/man/1/ps. Mogą również pojawiać się z tekstem "nieistniejący".

0

Wystąpił podobny problem.

Sprawdź, czy używasz automatycznego uzdrawiania, takiego jak Monit lub Supervisor, który uruchamia pracownika, gdy próbujesz go zatrzymać. Jeśli tak, wyłącz je.

Moi pracownicy byli spawnowani ze względu na zmiany, o których zapomniałem w update-rc.d w Ubuntu.

Więc zainstalowany sysv-rc-conf która daje czystą kontrolę interfejsu jakie procesy są przy ponownym uruchomieniu, można wyłączyć stamtąd i zapewniam Cię nie Chuck Norris Zmartwychwstanie: D

0

miałem ten sam problem. W moim przypadku gitlab był odpowiedzialny za wprowadzenie pracowników nginx. kiedy całkowicie usunąłem gitlab z mojego serwera, mogłem zabić pracowników nginx.

  1. ps -aux | grep "nginx"

  2. Szukaj robotników i sprawdzić w pierwszej kolumnie, która przynosi je.

  3. zabitych lub unistall odpowiedzialny i znowu zabić robotników, będą one przestać tarła; D