Co to jest proces zombie i jak go zabić?

Odpowiedzi:

17

O Boże! Nie nie nie. Nie używaj kill -9.

Nie daje to procesowi możliwości czystego:

  1. zamknij połączenia gniazd

  2. oczyść pliki tymczasowe

  3. poinformować dzieci, że odchodzi

  4. zresetować charakterystykę terminala itd. itd.

Zasadniczo wyślij 15 i poczekaj sekundę lub dwie, a jeśli to nie zadziała, wyślij 2, a jeśli to nie zadziała, wyślij 1. Jeśli to nie zadziała, USUŃ BINARNOŚĆ, ponieważ program źle się zachowuje!

Nie używaj kill -9. Nie wyjmuj kombajnu tylko po to, by posprzątać doniczkę.

Surowy_admin
źródło
13
kill -9 nie zabije zombie. Musisz zabić ich rodzica, spójrz na pstree.
LapTop006
3
@ LapTop006: W takim przypadku są bardziej jak wampiry; zabij głównego wampira, aby zatrzymać inwazję.
amfetamachina
2
Ta odpowiedź jest zła pod każdym względem. Proces jest zakończony; zamknął już swoje połączenia, wyczyścił pliki tymczasowe itp. itd. Nie ma już rzeczywistego procesu, tylko wpis w tabeli procesów. Nie usuwaj binarnego potomka - nie zachowuje się źle. Oznacza to po prostu, że rodzic nie zorganizował jeszcze odpowiedniego pogrzebu dla swojego dziecka.
Ken Williams
19

Proces zombie (właściwie teraz się nazywa <defunct>) nie jest tak naprawdę procesem. Jest to tylko wpis w tabeli procesów, więc proces nadrzędny może wykonać wait()wywołanie systemowe .

Nie powinieneś się o nich martwić. Nie zajmują żadnych zasobów, znikają, gdy ich rodzic woła, wait()gdy umiera sam rodzic.

vartec
źródło
9

Odpowiedź jest już zaakceptowana: MOŻESZ zabić proces zombie. Dołącz za pomocą debugera do procesu nadrzędnego i wywołaj funkcję waitpid. Np .: - załóżmy, że rodzic ma PID = 100, proces zombie ma PID = 200

$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
ondra
źródło
Ciekawy. Spróbuję tego.
ewwhite
8

Proces zombie nie ma żadnych przydzielonych zasobów innych niż wpis w drzewie procesów. Dzieje się tak, gdy finalizuje proces, jednak proces nadrzędny jeszcze nie odnieść go (tzn waited na nim).

Możesz spróbować zmusić rodzica do zrobienia tego, jeśli chcesz, wysyłając mu SIGCHLD ( kill -20) do rodzica, ale nie ma gwarancji, że rodzic to uszanuje.

Często będziesz je widzieć przez krótki czas (na przykład podczas przeglądania drzewa procesów za pomocą góry) - jest to normalne; W odcinku czasu między zakończeniem procesu potomnego a rodzicielem odpytuje o niego - proces potomny pojawi się jako zombie.

Jeśli jednak widzisz procesy zombie, które ciągle istnieją - co nie jest normalne - nadal nie musisz się tym przejmować - ponownie, ponieważ nie ma zasobów przydzielonych do martwego procesu - ogólnie oznacza to, że aplikacja jest źle napisana przez kiepskich programistów.

Jedynym momentem, w którym powinieneś się martwić procesami zombie, jest to, że widzisz ich wiele, na przykład, jeśli ta sama kiepska aplikacja wspomniana powyżej jest obciążona.

Mamy wielu gównianych programistów, w których pracuję, więc mam zaszczyt radzić sobie z takimi problemami i uczyć się wszelkiego rodzaju bezużytecznych rzeczy. W rzeczywistości - mój zespół często ucieka się do korzystania z gównianych skryptów powłoki napisanych przez tych gównianych deweloperów w wywiadach - jeśli kandydat może stwierdzić, że skrypt jest naprawdę kiepski, i powiedzieć nam, dlaczego jest gówniany, ma dobrą stopę w drzwiach.

Kserkses
źródło
0

Co do wirtualnej strzelby ...

$ shoot <pid>
#! / bin / sh
ofiara = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' '
ofiara \ nazwa = `ps -e -o pid, cmd | egrep "^ \ s * $ {ofiara} \ b" | głowa -n 1 | awk '{print $ 2}' '
#kill $ {ofiara}
echo „Zabito $ {nazwa_atiary}.”

I pamiętaj: zawsze strzelaj im w głowę.

drybjed
źródło
Przykro mi, ale dla przypomnienia, ten skrypt ma literówkę „nazwa_kosztu” i zabije rodzica PID podanego za 1 $, w każdym razie bierze pod uwagę, czy PID jest jedynym zombie, czy też ma rodzeństwo, to po prostu zabija ojca, a wraz z nim cała rodzina zginie.
Marc Riera,
-1

Proces zombie jest procesem, który zakończył wykonywanie, ale nadal znajduje się na liście w tabeli procesów.

kill -9 [nadrzędna nazwa_procesu] odłoży to, ze skrajnym uprzedzeniem.

Alan
źródło
kill -9 nie zabije procesu zombie - to jeden z powodów, dla których nazywają się zombie. „Proces” zombie nie zniknie, dopóki jego kod powrotu nie zostanie zebrany przez proces nadrzędny.
Mei
3
Nie, kill -9 na rodzica zabije rodziców, co startowych To rodzic, który BĘDZIE czerpania dziecka kod zwrotny.
Alan