Czy jest jakiś sposób na zabicie procesu zombie bez restartu? Oto jak to się stało:
Chcę pobrać plik 12 GB za pomocą torrenta. Po dodaniu pliku .torrent transmisja zmieniła się w proces zombie (próbowałem też ktorrent. Takie samo zachowanie). Wreszcie mogłem pobrać plik za pomocą µTorrenta, ale po zamknięciu programu zmienia się on również w zombie.
Próbowałem za pomocą kill
, skill
oraz pkill
z różnymi opcjami i -9
sygnał, ale bez powodzenia.
Po przeczytaniu niektórych rozwiązań w Internecie dowiedziałem się, że zabicie rodzica może zabić zombie. Ale zabijanie wina też nie pomogło.
Czy jest inny sposób?
Edytować:
ps -o pid, ppid, stat, comm
PID PPID STAT COMMAND
7121 2692 Ss bash
7317 7121 R+ ps
wyjście pstree:
init─┬─GoogleTalkPlugi───4*[{GoogleTalkPlug}]
├─NetworkManager─┬─dhclient
│ └─{NetworkManager}
├─acpid
├─amarok───19*[{amarok}]
├─apache2───5*[apache2]
├─atd
├─avahi-daemon───avahi-daemon
├─bonobo-activati───{bonobo-activat}
├─clock-applet
├─console-kit-dae───63*[{console-kit-da}]
├─cron
├─cupsd
├─2*[dbus-daemon]
├─2*[dbus-launch]
├─desktopcouch-se───desktopcouch-se
├─firefox───run-mozilla.sh───firefox-bin─┬─plugin-containe───8*[{plugin-contain}]
│ └─14*[{firefox-bin}]
├─gconfd-2
├─gdm-binary─┬─gdm-simple-slav─┬─Xorg
│ │ ├─gdm-session-wor─┬─gnome-session─┬─bluetooth-apple
│ │ │ │ ├─compiz───sh───gtk-window-deco
│ │ │ │ ├─fusion-icon
│ │ │ │ ├─gdu-notificatio
│ │ │ │ ├─gnome-panel───{gnome-panel}
│ │ │ │ ├─gnome-power-man
│ │ │ │ ├─gpg-agent
│ │ │ │ ├─gwibber-service
│ │ │ │ ├─nautilus
│ │ │ │ ├─nm-applet
│ │ │ │ ├─polkit-gnome-au
│ │ │ │ ├─2*[python]
│ │ │ │ ├─qstardict───{qstardict}
│ │ │ │ ├─ssh-agent
│ │ │ │ ├─tracker-applet
│ │ │ │ ├─trackerd
│ │ │ │ ├─wakoopa─┬─wakoopa
│ │ │ │ │ └─3*[{wakoopa}]
│ │ │ │ └─{gnome-session}
│ │ │ └─{gdm-session-wo}
│ │ └─{gdm-simple-sla}
│ └─{gdm-binary}
├─6*[getty]
├─gnome-keyring-d───2*[{gnome-keyring-}]
├─gnome-screensav
├─gnome-settings-
├─gnome-system-mo
├─gnome-terminal─┬─bash───ssh
│ ├─bash───pstree
│ ├─gnome-pty-helpe
│ └─{gnome-terminal}
├─gvfs-afc-volume───{gvfs-afc-volum}
├─gvfs-fuse-daemo───3*[{gvfs-fuse-daem}]
├─gvfs-gdu-volume
├─gvfsd
├─gvfsd-burn
├─gvfsd-computer
├─gvfsd-metadata
├─gvfsd-trash
├─hald─┬─hald-runner─┬─hald-addon-acpi
│ │ ├─hald-addon-cpuf
│ │ ├─hald-addon-inpu
│ │ └─hald-addon-stor
│ └─{hald}
├─indicator-apple
├─indicator-me-se
├─indicator-sessi
├─irqbalance
├─kded4
├─kdeinit4─┬─kio_http_cache_
│ └─klauncher
├─kglobalaccel
├─modem-manager
├─multiload-apple
├─mysqld───10*[{mysqld}]
├─named───10*[{named}]
├─nmbd
├─notification-ar
├─notify-osd
├─polkitd
├─pulseaudio─┬─gconf-helper
│ └─2*[{pulseaudio}]
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smbd───smbd
├─snmpd
├─sshd
├─timidity
├─trashapplet
├─udevd───2*[udevd]
├─udisks-daemon─┬─udisks-daemon
│ └─{udisks-daemon}
├─upowerd
├─upstart-udev-br
├─utorrent.exe───{utorrent.exe}
├─vnstatd
├─winbindd───2*[winbindd]
├─wnck-applet
├─wpa_supplicant
└─xinetd
Monitor systemu i góra pokazują, że proces zombie wykorzystuje zasoby:
Edycja 2: Myślę, że coś znalazłem. Próbowałem się wylogować i zobaczyłem ten komunikat:
Ponieważ inni klienci torrentów mają ten sam problem, może chodzi o rozmiar pliku. Używam Ubuntu 10.04 na partycjach ext4. Zabijanie nautilusa i wysyłanie do niego sygnału SIGCHLD nie działało.
ps -o pid,ppid,stat,comm
ipstree
do swojego pytania?Odpowiedzi:
Nie sądzę, że proces zombie jest bardzo bolesny. Proces zombie nie zajmuje żadnych zasobów. Po prostu ma wpis w tabeli procesów.
Proces Zombie nie jest procesem osieroconym, ma rodzica.
kill
,skill
pkill
nie będzie działać, ponieważ proces został już zabity, tylko że jego wpis nie został usunięty.Proces zombie można zabić, wysyłając
SIGCHLD
sygnał do rodzica. Myślę, że numerem sygnałuSIGCHLD
jest17
lub18
Jeśli to również się nie powiedzie, możesz zabić samego rodzica.
Z Wikipedii na temat sygnału SIGCHLD:
EDYCJA 1 : Zużyte zasoby systemowe to głównie pozycja tabeli procesów. Jeśli ktoś wie, czy zużywa więcej - cykl pamięci lub procesora, proszę dodać wyjaśnienie. AFAIK prawie nie zajmuje znaczących zasobów systemowych.
EDYCJA 2: Cytowanie z Wikipedii
W związku z tym wpis jest zachowywany, aby proces nadrzędny mógł poznać status wyjścia, ponieważ w momencie, gdy dziecko kończy pracę, rodzic prawdopodobnie nie jest w stanie lub nie jest gotowy do odczytania swojego statusu wyjścia.
EDYCJA 3
Do tej pory nigdy nie doświadczyłem procesu zombie zajmującego 100% procesora. Widząc to po raz pierwszy.
Spróbuj zrobić
killall utorrent.exe
Widzę, że są dwa przypadki,
utorrent.exe
a jednym z nich jest zombie. Prawdopodobnie drugi (dziecko). killall powinien zabić rodzica, ponieważ nie można zabić dziecka (zombie).EDYCJA 4
Wygląda na to, że killall nie działał, ponieważ dawał sygnał TERM zamiast KILL.
Spróbować
killall --signal=KILL utorrent.exe
Jeśli to nie zadziała, spróbuj zabić proces selektywnie.
Pobierz listę PID procesu utorrent.exe
Powinieneś dostać dwa takie procesy
Drugi to rodzic. Zabij to za pomocą
EDYCJA 5
Spróbuj znaleźć identyfikator rodzica procesu za pomocą tego polecenia bash
w twoim przypadku jest
Jeśli wynik jest podobny
Więc niestety myślę, że nie masz szczęścia. Identyfikator procesu
1
należy do init, bez którego twój system nie może działaćźródło
A zombie process does not take up any resources
i cytowałeśthe child is still consuming system resources ... it is known as a zombie process
.top -H
wyświetlić wątki zamiast procesów u góry.Korzystanie
kill
z samego procesu jest rzeczywiście nieskuteczne, ponieważ proces jest już martwy;kill
wprowadza proces na żywo do stanu zombie.Proces nadrzędny jest odpowiedzialny za pobranie kodu zakończenia procesu; proces pozostaje zombie, dopóki nie zostanie to zrobione.
init
Proces będzie odebrać kod zakończenia jakiegokolwiek procesu i należy go wyrzucić, więc jest to „last resort” rodzic, który będzie oczyścić każdą zombie, który jest bezpośrednim potomkiem.Zabicie rodzica procesu zombie jest zwykle skuteczne, ponieważ proces zombie powraca wtedy do
init
roli rodzica, gdy tylko proces rodzica zniknie (tzn. Zabicie rodzica zmieniło ten proces w zombie, a dziadek przeczytał kod wyjścia rodzica , więc rodzic naprawdę zniknął). Zombie może być rodzicem zombie, więc samo zabicie rodzica nie jest wystarczające, musi zostać również zebrane przez inny proces.Zauważ, że procesy nigdy nie są odpowiedzialne za sprzątanie wnuków - zawsze przywracają proces 1 jako rodzic (dlatego autorzy demonów czasami używają podwójnego rozwidlenia () i przerywają proces w środku, aby całkowicie oddzielić proces potomny od wywołania muszla)
Powodem, dla którego zabijanie
wine
prawdopodobnie nie jest skuteczne, jest to, że tak naprawdę nie był rodzicem procesu zombie; raczej „utorrent.exe”, który jest bezpośrednim potomkiem init, to. Proces ten jednak nadal przebiega normalnie, po prostu zaniedbując swoje obowiązki.źródło
ps waux
wymienia wPPID
kolumnie dla zombie.Znacznie łatwiejszy sposób niż killall, -9 itp .:
1) Użyj qBitorrent zamiast konsoli uTorrent (czekam również na wersję GUI, a qBitorrent w zasadzie to jest).
2) Jeśli używasz wersji 11.04 lub nowszej, naciśnij Alt + F2 (otwiera specjalne okno poleceń), wpisz xkill, a twoja mysz będzie teraz x. Kliknij program, który chcesz zamknąć (UI = ID procesu), a on go zabije.
Porada zaawansowana: powiąż skrót klawiaturowy dla „xkill”, tak jak mam to na mojej klawiaturze makr G15.
źródło
W moim przypadku, gdy wino wisi i nie mogę zabić dziecka Zombie strzelbą, zrobiłbym:
wineserver -k
wtedy zabiłbym „syna procesu”killall -9 Oblivion.exe
(na przykład)Z tego, co rozumiem, wineserver wysyła sygnał do wszystkich swoich Zombie Childs, że wszyscy umrą (Z powodu strzelby, którą znasz), ale czasami dziecko myśli samo i chce podbić świat burzą. Więc robię dodatkowe
killall -9
lubkill -9
z identyfikatorem procesu.źródło
kill -s SIGCHLD ppid
Domyślam się, że używasz dysku SSD.
Podczas dodawania dużych torrentów do klienta torrent, pliki „zastępcze” pobieranego torrenta są faktycznie tworzone na dysku, ale są puste, dopóki nie zostaną stopniowo wypełnione podczas procesu pobierania.
W przypadku normalnego dysku twardego dysk jest wąskim gardłem i nie zauważysz problemu z wydajnością w pozostałej części pulpitu.
Podczas korzystania z dysku SSD procesor jest wąskim gardłem, a aplikacja wydaje się ulegać awarii (staje się szara). Jeśli odejdziesz na chwilę, wszystko wróci do normy i wszystko będzie dobrze. Takie było moje doświadczenie od czasu przejścia na dysk SSD.
Jeśli chodzi o procesy zabijania, inni udzielili lepszych porad niż ja - użycie sygnału KILL zwykle działa, ale miałem dziwny, który wymagał ponownego uruchomienia na przestrzeni lat.
źródło