Yeniden başlatmadan bir zombi işlemini öldürmenin bir yolu var mı?


48

Yeniden başlatmadan bir zombi işlemini öldürmenin bir yolu var mı? İşte böyle oldu:

Torrent kullanarak 12GB dosya indirmek istiyorum. .Torrent dosyasını ekledikten sonra iletim bir zombi işlemine dönüştü (Ben de ktorrent'i denedim. Aynı davranış). Sonunda µTorrent kullanarak dosyayı indirebilirim ancak programı kapattıktan sonra, aynı zamanda bir zombiye dönüşüyor.

Kullanarak denedim kill, skillve pkillfarklı seçenekler ile -9sinyal ama hiçbir başarı.

İnternette bazı çözümler okuduktan sonra, ebeveynin öldürülmesinin zombiyi öldürebileceğini öğrendim. Ancak şarabı öldürmek de işe yaramadı.

Başka bir yolu var mı?

Düzenle:

ps -o pid, ppid, stat, iletişim

PID  PPID STAT COMMAND
7121  2692 Ss   bash
7317  7121 R+   ps

pstree çıkışı:

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

Sistem monitörü ve top zombi sürecinin kaynakları kullandığını gösterir:

görüntü tanımını buraya girin

görüntü tanımını buraya girin

Düzen 2: Sanırım bir şey buldum. Çıkış yapmaya çalıştım ve şu mesajı gördüm:

görüntü tanımını buraya girin

Diğer torrent istemcilerinin aynı sorunu olduğu için dosya boyutu ile ilgili bir sorun olabilir. Ext4 bölümlerinde ubuntu 10.04 kullanıyorum.


Sorunuzun çıktısını ps -o pid,ppid,stat,commve çıktısını ekleyebilir misiniz pstree?
Mikel

Burada da aynı sorunu yaşıyorum ve Google Googling'den sonra kurulum sırasında ana klasörünüzü şifrelediğinizde ve 4 gb'den daha büyük torrent indirmeyi seçerken bu durum ortaya çıkıyor. % 99 cpu yerken zombi sürecinden kurtulmak için yeniden başlatmadan başka bir yol bulamadım. bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/431975 bununla ilgileniyor gibi görünüyor, ancak bunu çözmek için çok fazla bir şey yapılmadığı görülüyor :(
user972876 20:11

Ayrıca lütfen burayı okuyun: askubuntu.com/questions/48624/what-are-zombie-processes Bu, birçok şüpheyi çözmenize yardımcı olacaktır.
Luis Alvarado

Yanıtlar:


41

Hiçbir şey zombi sürecinin başını ağrıtıyor. Bir zombi süreci herhangi bir kaynak almaz. Sadece süreç tablosuna girişi var.

Bir Zombie işlemi bir yetim işlemi değildir, bir ebeveyni vardır.

kill, skill pkillişlem zaten öldürüldüğü için işe yaramayacak, sadece girişi kaldırılmadı.

Zombie işlemi SIGCHLDebeveyne sinyal göndererek öldürülebilir . Ben sinyal sayısı düşünüyorum SIGCHLDolduğu 17veya18

Bu da başarısız olursa, ebeveynin kendisini öldürmek isteyebilirsiniz.

SIGCHLD sinyalindeki Wikipedia'dan:

Bir alt süreç, ebeveyn beklemenin çağrılmasından önce sona erdiğinde, çekirdek, ebeveyninin daha sonra bekletme çağrısı yapması için işlemle ilgili bazı bilgileri saklar. Çünkü çocuk hala sistem kaynaklarını tüketiyor ancak çalıştırmıyor zombi süreci olarak bilinir.


DÜZENLEME 1 : Tüketilen sistem kaynakları çoğunlukla işlem tablosu girişidir. Birisi bundan daha fazlasını tüketip tüketmediğini biliyorsa - bellek veya CPU döngüsü, lütfen bir açıklama ekleyin. AFAIK, önemli sistem kaynaklarını neredeyse hiç almamaktadır.


2 EDIT: Vikipedi alıntı

Unix ve Unix benzeri bilgisayar işletim sistemlerinde, bir zombi işlemi veya geçersiz işlem, yürütmeyi tamamlayan, ancak yine de işlem tablosunda bir girişi olan bir işlemdir. Bu giriş, (şimdi zombi) işlemini başlatan işlemin çıkış durumunu okumasına izin vermek için hala gereklidir.

Böylece giriş, ebeveyn sürecinin çıkış durumunu bilmesi için tutulur, çünkü çocuk çıktıktan sonra ebeveyn büyük olasılıkla bir durumda değildir veya çıkış durumunu okumaya hazır değildir.


EDIT 3

Bugüne kadar CPU'nun% 100'ünü alan bir zombi süreci yaşamamıştım. Bunu ilk defa görmek.

Bir deneyin killall utorrent.exe

İki örnek olduğunu utorrent.exeve bunlardan birinin zombi olduğunu görebiliyorum. Muhtemelen ikincisi (çocuk). Çocuk (zombi) öldürülemediğinden öldürme veli öldürmelidir.


EDIT 4

Öyle görünüyor ki Killall işe yaramadı çünkü KILL yerine TERM sinyali veriyordu.

Denemek killall --signal=KILL utorrent.exe

Bu işe yaramazsa, işlemi seçici bir şekilde öldürmeyi deneyin.

Utorrent.exe işlemi PID listesini alın

ps -e | grep -i utorrent

Gibi iki işlem almalısınız

xxxx ?        aa:bb:cc utorrent.exe defunct
yyyy ?        aa:bb:cc utorrent.exe

Yani ikincisi ebeveyn. Kullanarak öldür

öldür -9 yyyy

EDIT 5

Lütfen bu bash komutuyla işlemin Ana Kimliğini bulmayı deneyin.

cat / proc / {defunctpid} / durum | grep -i ppid

senin durumunda

cat / proc / 7298 / durum | grep -i ppid

Çıktı gibi geliyorsa

PPid: 1

O zaman ne yazık ki şanssız olduğunuzu düşünüyorum. İşlem Kimliği 1, sisteminizin çalışamayacağı init aittir


2
Sen yazdın A zombie process does not take up any resourcesve alıntı yaptın the child is still consuming system resources ... it is known as a zombie process.
maaartinus

Evet. Gönderiyi ne demek istediğimi netleştirmek için güncelledim.
Manish Sinha

7
Zombi işlemi CPU çekirdeğimin birini tamamen alıyor. Çekirdeğin kullanımı% 100'dür. Bu yüzden sadece işlem tablosu girişi değil. Soruya ek bilgi ekleyeceğim.
Pedram

3
CPU kullanan bir zombi arka plan konuları çalıştırıyor olabilir. top -Hİşlemleri en üste yerleştirmek yerine konuları göstermeyi deneyin .
Zan Lynx,

1
Devre dışı bırakma işlemlerinde en büyük sorun, sonunda kullanılan bağlantı noktalarını kullanmaya devam etmeleridir.
pietrovismara

10

Kullanılması killsürecinin kendisi üzerinde işlem çoktan ölmüş olduğu gibi, gerçekten de etkisizdir; killzombi durumuna canlı bir süreç getiriyor.

İşlemin çıkış kodunun alınmasından ana süreç sorumludur; Bu yapılıncaya kadar süreç bir zombi olarak kalır. initSüreç herhangi sürecin çıkış kodunu alıp çöpe atmak, bu nedenle doğrudan soyundan olan herhangi zombi temizler "son çare" üstüdür olacaktır.

Zombi sürecinin ebeveyni öldürmek genellikle etkilidir, çünkü zombi süreci init, ebeveyn süreci biter bitmez ebeveyne geri döner (örneğin, ebeveyni öldürmek, bu süreci bir zombiye dönüştürür ve büyük ebeveyn ebeveyn kodunu okur). , yani ebeveyn gerçekten gitti). Bir zombi bir zombinin ebeveyni olabilir, bu nedenle sadece ebeveyni öldürmek yeterli değildir, başka bir işlem tarafından da toplanması gerekir.

Süreçlerin torunlarının temizliğinden hiçbir zaman sorumlu olmadıklarını unutmayın - her zaman 1'i ebeveyn olarak geri alırlar (bu nedenle daemon yazarları bazen çift çatal kullanırlar) ve çocuk sürecini çağıran kişiden tamamen ayırmak için ortadaki işlemi sonlandırırlar. kabuk)

Öldürmenin winemuhtemelen etkili olmamasının nedeni, gerçekten zombi sürecinin ebeveyni olmaması; bunun yerine, init'in doğrudan soyundan "utorrent.exe" dir. Ancak bu süreç normal olarak devam etmekte ve sadece görevlerini göz ardı etmektedir.


Bilgi için teşekkürler. Fakat çözüm nedir?
Pedram

1
Gerçek ebeveyn sürecini, yani zombi ps wauxiçin PPIDsütunda listelenen süreci öldürmek .
Simon Richter

Pstree çıktısında görebileceğiniz gibi "utorrent.exe" öğesinde üst öğe yoktur.
Pedram

Biri diğerinin çocuğu olduğu, bu isimde iki işlem vardır. Zombinin, üst "utorrent.exe" işlemini temizleme işleminden sorumlu yapan çocuk olduğundan şüpheleniyorum; Eğer bu süreci öldürürseniz, init ebeveyni temizler, sonra çocuk init'e bağlanır ve hemen temizlenir.
Simon Richter

killall bu durumda işe yaramadı. Şimdi µTorrent'i başlattım ve herhangi bir ebeveyni ya da çocuğu olmadı, ancak henüz öldürülemiyor.
Pedram

3

Killall, -9, vs'den çok daha kolay bir yol:

1) uTorrent konsolu yerine qBitorrent kullanın (Ben de bir GUI sürümü bekliyorum ve qBitorrent aslında budur).

2) 11.04 veya üstü kullanıyorsanız, alt + f2 tuşlarına basın (özel bir komut penceresi açar), xkill yazın ve fareniz şimdi bir x olur. Kapatmak istediğiniz programa tıklayın (UI = işlem kimliği) ve bu sizin için öldürecektir.

Gelişmiş ipucu: G15 makro klavyemde olduğu gibi "xkill" için klavye kısayolunu bağlayın.


1

Benim durumumda şarap kilitlendiğinde ve Zombi Çocuğu av tüfeğiyle öldüremem, bende:

wineserver -ko zaman “Sürecin Oğlu” nu öldürürdüm killall -9 Oblivion.exe(Mesela)

Anladığım kadarıyla wineserver tüm Zombie Childs'larına hepsinin öleceğine dair bir sinyal gönderir (bildiğiniz av tüfeği yüzünden) ama bazen bir çocuk kendi başına düşünür ve dünyayı fırtınaya sokmak ister. Bu yüzden ek killall -9veya kill -9işlem kimliği ile yapıyorum .


İşe yaramadı. İletim ve ktorrent dışında aynı sorun var ve şarapla ilgisi yok.
Pedram

Şarapla birlikte ebeveyni şarapla birlikte kullanıp, çocuğu kızdırmaktan bahsettim. Neyse, ebeveyne çocuğunun bir zombi olduğunu bildirmek için bir sinyal göndermeye çalıştın (Ebeveynlerinin hazır olmadığı bir şey). Örneğin:kill -s SIGCHLD ppid
Luis Alvarado

Ayrıca ne tür bir donanıma sahipseniz, bir zombinin kaynakları en fazla nasıl kullanabileceğini bulmakta yardımcı olabilir.
Luis Alvarado

Ne yazık ki ya da çalışmıyor.
Pedram

İşlemcim çekirdek i7 860.
Pedram

-4

Tahminimce SSD kullanıyorsunuz.

Bir torrent istemcisine büyük torrentler eklerken, indirdiğiniz torrentin "yer tutucu" dosyaları aslında diskte oluşturulur, ancak indirme işlemi sırasında yavaş yavaş doldurulana kadar boştur.

Normal bir sabit diskte, disk tıkanıklık olur ve masaüstünüzün geri kalanında performans sorunu fark etmezsiniz.

Bununla birlikte, bir SSD kullanırken, CPU darboğazıdır ve uygulama kilitlenmiş (gri renkte) görünür. Bir süre bırakırsanız, iyileşir ve her şey yoluna girer. Bir SSD'ye geçmeden beri bu benim deneyimim.

Öldürme süreçleriyle ilgili olarak, diğerleri benden daha iyi tavsiyeler vermiştir - KILL sinyalini kullanmak genellikle işe yarar, ancak yıllar içinde yeniden başlatmayı gerektiren garip bir durum yaşadım.


1
Teşekkürler, ama normal bir sabit disk kullanıyorum.
Pedram

1
"Ancak, bir SSD kullanırken, CPU darboğazıdır ve uygulama kilitlenmiş gibi görünmektedir (gri olur). Bir süre bırakırsanız, kurtarılır ve her şey yoluna girer." Bu durumda, süreç bir zombi değildir. Zombi süreçleri ve kesintisiz uykudaki işlemler aynı şey değildir. Bir zombi süreci artık gerçekten çalışmıyor, kaynakları (işlem tablosuna tek bir giriş hariç) almıyor ve bir daha asla hayata geri dönemiyor.
Eliah Kagan,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.