Istnieje 5 procesów, których nie można zabić, kill -9 $PID
a wykonanie cat /proc/$PID/cmdline
spowoduje zawieszenie bieżącej sesji. Może to procesy zombie.
Wykonanie ps -ef or htop
spowoduje także zawieszenie bieżącej sesji. Ale top
i ps -e
działają dobrze.
Wygląda więc na to, że system plików nie reaguje na dwa problemy.
Jest to maszyna produkcyjna z maszynami wirtualnymi, więc ponowne uruchomienie nie jest opcją.
Następujące identyfikatory procesów nie działają: 16181 16765 5985 7427 7547
Rodzicem tych procesów jest init
├─collectd(16765)─┬─{collectd}(16776)
│ ├─{collectd}(16777)
│ ├─{collectd}(16778)
│ ├─{collectd}(16779)
│ ├─{collectd}(16780)
│ └─{collectd}(16781)
├─collectd(28642)───{collectd}(28650)
├─collectd(29868)─┬─{collectd}(29873)
│ ├─{collectd}(29874)
│ ├─{collectd}(29875)
│ └─{collectd}(29876)
I jeden z procesów qemu nie działa
|-qemu-system-x86(16181)-+-{qemu-system-x86}(16232)
| |-{qemu-system-x86}(16238)
| |-{qemu-system-x86}(16803)
| |-{qemu-system-x86}(17990)
| |-{qemu-system-x86}(17991)
| |-{qemu-system-x86}(17992)
| |-{qemu-system-x86}(18062)
| |-{qemu-system-x86}(18066)
| |-{qemu-system-x86}(18072)
| |-{qemu-system-x86}(18073)
| |-{qemu-system-x86}(18074)
| |-{qemu-system-x86}(18078)
| |-{qemu-system-x86}(18079)
| |-{qemu-system-x86}(18086)
| |-{qemu-system-x86}(18088)
| |-{qemu-system-x86}(18092)
| |-{qemu-system-x86}(18107)
| |-{qemu-system-x86}(18108)
| |-{qemu-system-x86}(18111)
| |-{qemu-system-x86}(18113)
| |-{qemu-system-x86}(18114)
| |-{qemu-system-x86}(18119)
| |-{qemu-system-x86}(23147)
| `-{qemu-system-x86}(27051)
linux
process
kill
zombie-process
Sam Stoelinga
źródło
źródło
/usr/bin/strace ps -ef
aby zobaczyć, gdzie dokładnieps -ef
wisi twój .ps -el
działa i w jakim stanie są te procesy?Odpowiedzi:
Nie masz zombie.
cat /proc/$PID/cmdline
nie miałby żadnego problemu z zombie. Jeślikill -9
nie zabije programu , oznacza to, że program wykonuje pewne nieprzerwane operacje we / wy. Zazwyczaj oznacza to jedną z trzech rzeczy:Narzędzia takie jak
ps
mogą się zawiesić, jeśli spróbują odczytać pewne informacje, takie jak ścieżka wykonywalnego procesu, której jądro nie podaje z jednego z powyższych powodów.Spróbuj
cat /proc/16181/syscall
zobaczyć, co robi proces 16181. To może, ale nie musi działać, w zależności od tego, jak daleko zaszedł twój system.Jeśli problemem jest sieciowy system plików, być może możesz wymusić jego odmontowanie lub przełączyć na tryb online. Jeśli problemem jest błąd jądra lub sprzętu, to, co możesz zrobić, będzie zależeć od charakteru błędu. Zdecydowanie zalecane jest ponowne uruchomienie (i uaktualnienie do naprawionego jądra lub wymiana uszkodzonego sprzętu).
źródło
Inne odpowiedzi zakładają, że są to procesy zombie. Proces zombie jest procesem, który się zakończył, ale nadal znajduje się w tabeli procesów, na wypadek, gdyby rodzic chciał poznać status wyjścia. Są to normalne i
init
automatycznie usuwają przypisane do nich procesy zombie.Procesy zombie nigdy nie powinny powodować zawieszania czegokolwiek, więc wygląda na to, że to nie może być twój problem. Jeśli jest to zawieszenie wywołania systemowego lub sterownika, proces może być w stanie nieprzerwanym. Jest to dobre wyjaśnienie tutaj .
źródło
fork
powodzenie (gdynrpoc
zostanie osiągnięty trudny poziom), ponieważ nadal zajmują miejsce w tabeli procesów.Aby znaleźć procesy zombie w systemie Linux:
Najpierw możesz spróbować wysłać sygnał SIGCHLD do procesu nadrzędnego zombie za pomocą polecenia kill. Zauważ, że powyższe polecenie podaje PPID (PID procesu nadrzędnego) każdego zombie. W naszym przykładzie PPID zombie to
555
.Jeśli proces zombie nadal nie znika, możesz zabić proces nadrzędny (np. 555) zombie.
Gdy proces nadrzędny zostanie zabity, zombie zostanie adoptowane przez proces init, który jest rodzicem wszystkich procesów w Linuksie. Proces inicjacji okresowo wzywa
wait()
do czerpania dowolnego procesu zombie.źródło
Możesz zabić zombie tylko zabijając jego rodzica. Proces zombie uwolnił wszystkie swoje zasoby i czeka na jego status wyjścia, który zostanie odebrany przez jego rodzica. Staje się zombie, gdy rodzic nie wykonuje polecenia a,
wait
aby odebrać status wyjścia od swojego dziecka. Kiedy zabijesz rodzica zombie,init
podnosi status wyjścia i zombie w końcu umiera.źródło
init
. Jeśli zombie rodzi się ponownieinit
, nie możesz go zabić.