System information as of Fri Mar 9 19:40:01 KST 2012
System load: 0.59 Processes: 167
Usage of /home: 23.0% of 11.00GB Users logged in: 1
Swap usage: 0% IP address for eth1: 192.168.0.1
=> There is 1 zombie process.
Graph this data and manage this system at https://landscape.canonical.com/
10 packages can be updated.
4 updates are security updates.
Last login: Fri Mar 9 10:23:48 2012
a@SERVER:~$ ps auxwww | grep 'Z'
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
usera 13572 0.0 0.0 7628 992 pts/2 S+ 19:40 0:00 grep --color=auto Z
a@SERVER:~$
Jak znaleźć ten proces zombie?
ps auxwww | grep 'Z'
polecenie powinno pokazywać proces wZ
stanie. „Informacja o systemie”=> There is 1 zombie process.
wydaje się być błędem. Albo to, albo w pytaniu brakuje informacji.Odpowiedzi:
Aby zabić zombie (proces), musisz zabić jego proces nadrzędny (tak jak prawdziwe zombie!), Ale pytanie brzmiało, jak go znaleźć.
Znajdź zombie (pytanie odpowiedziało na tę część):
Dostajesz Zombie i cokolwiek innego z Z, więc dostaniesz także grep:
Znajdź rodzica zombie:
Da tobie:
W takim przypadku nie chcesz zabijać tego procesu nadrzędnego i powinieneś być całkiem zadowolony z jednego zombie, ale zabicie bezpośredniego procesu nadrzędnego 5145 powinno się go pozbyć.
Dodatkowe zasoby na askubuntu:
źródło
ps wauxf
robi to samoMimo że to pytanie jest stare, myślałem, że wszyscy zasługują na bardziej wiarygodną odpowiedź:
To wyemituje dwie kolumny rozdzielone spacjami, z których pierwsza to PID, a druga to jej stan.
Nie sądzę, że nawet GNU
ps
zapewnia sposób na bezpośrednie filtrowanie według stanu, ale można to zrobić niezawodnieawk
Masz teraz listę PID, które są zombie. Ponieważ znasz stan, nie jest już konieczne jego wyświetlanie, aby można go było odfiltrować.
Podanie rozdzielonej znakami nowej linii identyfikatorów PID zombie.
Możesz teraz operować na tej liście za pomocą prostej pętli powłoki
ps
jest potężnym narzędziem i nie trzeba robić nic skomplikowanego, aby uzyskać z niego informacje o procesie.(Znaczenie różnych stanów procesu tutaj - https://unix.stackexchange.com/a/18477/121634 )
źródło
awk
jest również potężnym narzędziem, które nie tylko dzieli tekst, ale może go również dopasować. +1 ... inne używanegrep
tam, gdzie jest to niepotrzebne i nieprecyzyjne.ps -p "$pid" -opid=,ppid=
ppid=
do listy opcji, więc nie trzeba używać osobnego polecenia, aby uzyskać ppid.ps aux | awk '{ print $8 " " $2 }' | grep -w Z
Od: http://www.cyberciti.biz/tips/killing-zombie-process.html
Z komentarzy ulepszony:
Ostrożnie: ten również zabija proces.
źródło
ps axo pid=,stat= | awk '$2~/Z/ {print $1}'
zamiast tego).Mniej znaczy więcej:
To znaczy, daj mi las (drzewo) wszystkich procesów użytkowników w formacie zorientowanym na użytkownika z nieograniczoną szerokością dowolnego tty i pokaż mi go na połowie ekranu powyżej, gdzie pasuje to, że ósma kolumna zawiera Z, i dlaczego nie podświetlić całej linii.
Format zorientowany na użytkownika wydaje się oznaczać:
USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND
więc status Zombie pojawi się w 8 kolumnie.Możesz rzucić
N
przed,p
jeśli chcesz numery linii, i a,J
jeśli chcesz gwiazdkę na meczu. Niestety, jeśli użyjesz,G
aby nie podświetlać linii, gwiazdka nie będzie pokazywana, choćJ
tworzy dla niej miejsce.W końcu dostajesz coś, co wygląda:
Możesz to zrobić za pomocą (i wykryje, czy twój terminal lubi -U Unicode lub -A Ascii):
LUB po prostu, wiesz, użyj strzałki w górę,
less
aby podążać za tym drzewem / lasem przez hierarchię; to właśnie zalecałem przy podejściu „Mniej znaczy więcej”.źródło
Proponuję ci to polecenie:
źródło
aux
i mungowanie z niego łańcuchów jest niepotrzebnie niewiarygodne, kiedy możesz użyć-o
i zażądać dokładnie tego, czego chcesz. Użyjps ax -o pid=,stat= | awk '$2 ~ "[Zz]" { printf("%s, PID = %d\n", $2, $1); }'
zamiast tego.Aby wyświetlić listę procesowych zombie, wypróbuj to polecenie:
Może być konieczna zmiana w
$7
zależności od systemu operacyjnego.Spowoduje to również zwrócenie listy ich procesów nadrzędnych id (
PPID
).Aby spróbować zabić zombie (po przetestowaniu powyższego polecenia), spróbuj:
Aby zidentyfikować swoich rodziców, spróbuj
pstree
:źródło
j
formatu jest niepotrzebnie skomplikowane. Użyj-o
, aby zamiast tego wybrać, co chcesz.ps j
nie drukuje wszystkich procesów w systemie. Wyświetla tylko informacje o aktualnych procesach użytkownika (w stylu zadań BSD), więc może przegapić procesy zombie.