Yeniden başlatmadan öldürülemeyen bir süreç nasıl öldürülür?


11

Öldürülemeyen 5 işlem vardır kill -9 $PIDve yürütme cat /proc/$PID/cmdlinegeçerli oturumu askıya alır. Belki de zombi süreçleridir.

Yürütme ps -ef or htopayrıca geçerli oturumu askıya alır. Ama topve ps -eiyi çalışıyor.

Görünüşe göre dosya sisteminin yanıt vermediği iki sorun var.

Bu, sanal makineleri çalıştıran bir üretim makinesidir, bu nedenle yeniden başlatma bir seçenek değildir.

Aşağıdaki işlemler kimlikleri çalışmıyor: 16181 16765 5985 7427 7547

Bu süreçlerin üst öğesi 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)

Ve qemu işlemlerinden biri çalışmıyor

|-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)

1
Zombi süreçleri bir soruna neden olmamalıdır. Zombi işlemlerinin sayısı sunucudaki işlem sınırını aşacak kadar büyükse, soruna neden olur.
Raza

@Salton: ps -ef ve htop'u kullanamayız, bu yüzden bazı problemlerimiz var, belki de gördüğümüz şey zombi süreci olarak adlandırılmıyor?
Sam Stoelinga

1
/usr/bin/strace ps -efTam olarak nerede ps -efasılı olduğunuzu görmek için kullanarak izlemeyi deneyebilirsiniz .
Raza

2
Bunların zombi olduğunu nasıl belirlediniz? Bu daha çok asılı işlemlere benziyor. Does ps -eliş ve devlet bu süreçler vardır?
Nils

Sonunda, sorunlar hala gittikçe kötüleştiğinden, müşteri hala makineyi yeniden başlatmaya karar verdi. Tüm girdiler için teşekkürler. Zombiler ve kesintisiz süreçler hakkında çok şey öğrendim.
Sam Stoelinga

Yanıtlar:


22

Zombilerin yok. cat /proc/$PID/cmdlinebir zombi ile herhangi bir sorun olmaz. Eğer kill -9programı öldürmek değil , bu programın bazı kesintisiz G / Ç işlemi yapıyor demektir. Bu genellikle üç şeyden birini gösterir:

  • yanıt vermeyen bir ağ dosya sistemi;
  • çekirdek hatası;
  • bir donanım hatası.

psÇekirdek, yukarıdaki nedenlerden biri için sağlamadığı işlem yürütülebilir yolu gibi bazı bilgileri okumaya çalışırsa, gibi yardımcı programlar askıda kalabilir.

cat /proc/16181/syscall16181'in ne yaptığını görmeye çalışın . Bu, sisteminizin ne kadar ileri gittiğine bağlı olarak işe yarayabilir veya çalışmayabilir.

Sorun bir ağ dosya sistemiyse, onu zorla çıkarabilir veya çevrimiçi hale getirebilirsiniz. Sorun bir çekirdek veya donanım hatasıysa, yapabileceğiniz şey hatanın doğasına bağlı olacaktır. Yeniden başlatma (ve sabit bir çekirdeğe yükseltme veya bozuk donanımı değiştirme) önemle tavsiye edilir.


Kedi asla cevap vermez. Bunun bir hata olduğunu düşünmüyorum. Bence bu bir "özellik".
Baykuş

7

Diğer cevaplar bunların zombi süreçleri olduğunu varsayar. Bir zombi işlemi, çalışmayı bitirmiş bir işlemdir, ancak ebeveynin çıkış durumunu bilmek istemesi durumunda hala işlem tablosundadır. Bunlar normaldir ve initkendisine atanan zombi süreçlerini otomatik olarak temizler.

Zombi süreçleri asla hiçbir şeyin asılmasına neden olmamalıdır, bu yüzden probleminiz olmayabilir. Bir sistem çağrısı veya sürücü asılıysa, işlem kesintisiz bir durumda olabilir. Burada iyi bir açıklama var .


Çok fazla zombi işlemi , işlem tablosunda hala yer kapladığından fork(zor nrpoculaşıldığında) başarılı olmasını engelleyebilir .
dhchdhd

2

Linux'ta zombi süreçlerini bulmak için:

$ ps axo stat, ppid, pid, iletişim | grep -w geçersiz

Z 555 10242 Lanet-Zombi <geçersiz>

İlk olarak, zombi üst sürecine kill komutunu kullanarak SIGCHLD sinyali göndermeyi deneyebilirsiniz. Yukarıdaki komutun size her zombi için PPID (ana işlemin PID'si) verdiğini unutmayın. Örneğimizde, zombi PPID'si 555.

$ sudo kill -s SIGCHLD 555

Bir zombi süreci hala geçmezse, zombi üst sürecini (örn. 555) öldürebilirsiniz.

$ sudo öldür -9 555

Üst süreci öldürüldükten sonra, zombi Linux'taki tüm süreçlerin üst öğesi olan init işlemi tarafından benimsenecektir. Başlatma süreci periyodik olarak wait()herhangi bir zombi sürecini toplamaya çağırır .


Bu gerçek cevap. Ebeveyn öldürmek işe yaradı, teşekkürler.
Andrew

1

Bir zombi sadece ebeveynini öldürerek öldürebilirsin. Bir zombi süreci tüm kaynaklarını serbest bıraktı ve çıkış durumunun ebeveyn tarafından alınmasını bekliyor. Ebeveyn wait, çocuktan çıkış durumunu almak için a yürütmediğinde bir zombi haline gelir . Zombi ebeveynini öldürdüğünüzde initçıkış durumunu alır ve zombi sonunda ölür.


Yani init'i öldürmemi mi istiyorsun? Üzgünüm hehe sorusundan net değil ama ebeveyn init gibi görünüyor :( Soruyu düzenledim.
Sam Stoelinga

4
Hayır, zombi öldürmeye çalışmamanızı istiyoruz. Bir zombiyi öldüremezsin. Bu SSS, Unix'in kendisi kadar eskidir.
tripleee

@tripleee: Evet, anladığım bu. Belki de sahip olduğum şey bir zombi değildir. htop çalışmıyor ve cat / proc / $ pid / cmdline veya ls / proc / $ pid / de çalışmıyor. Normalde bu zombilerle olmaz, bu yüzden burada sordum, bu yaygın bir sorun imo değil. Hepinizin davamı başlatan veya yeniden başlatmanızı sağlayan ebeveynleri öldürmenizi söyleyen birkaç cevabı kontrol ettim.
Sam Stoelinga

1
"Ebeveyn öldür" düzenli bir zombi hasat yoludur. Öldüremezsin init. Bir zombi altında onarılırsa init, onu öldüremezsiniz.
tripleee
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.