Co to jest proces Zombie:
Jest to proces, który się zakończył, ale nie jest natychmiast usuwany z pamięci, ponieważ jego deskryptor procesu pozostaje w pamięci.
Jakie powinno być normalne zachowanie procesu:
Po zakończeniu procesu jego stan staje się
EXIT_ZOMBIE
a element nadrzędny procesu jest powiadamiany, że jego proces podrzędny umarł z
SIGCHLD
sygnał.
Proces nadrzędny powinien następnie uruchomić
wait()
dla wywołania systemowego, aby odczytać kod zakończenia martwego procesu i inne informacje. Po
wait()
proces zombie jest usuwany z pamięci. Dzieje się to szybko, więc nie widzisz procesów zombie gromadzących się w twoim systemie. Ale w przypadkach, gdy widzimy nagromadzenie kilku procesów zombie, jest to sytuacja, w której kod programu nie jest wydajny.
Jak znaleźć procesy zombie:
Uruchamianie polecenia
top
Uruchamianie polecenia
ps -ef | grep defunct
Jak zakończyć gromadzące się procesy zombie:
W większości przypadków procesy zombie mają ten sam identyfikator procesu nadrzędnego.
Istnieją dwie metody usunięcia procesu:
- Wyślij
SIGCHLD
sygnał do procesu nadrzędnego.
Ten sygnał mówi procesowi nadrzędnemu, aby uruchomił wait()
System wzywa i sprząta swoje dzieci zombie:
kill -s SIGCHLD <PPID>
Przykład:
kill -s SIGCHLD 2201
- Zabij proces nadrzędny zombie
kill -9 <PPID>
Przykład:
kill -9 2201