Sanal Av Tüfeği mi?
Aman Tanrım! Hayır hayır hayır. Kill -9 kullanmayın.
Sürece temiz bir şekilde bir şans vermez:
soket bağlantılarını kapat
geçici dosyaları temizle
çocuklarını gideceğini bildir
terminal özelliklerini sıfırlar vb.
Genel olarak, 15 gönderin ve bir iki saniye bekleyin ve bu işe yaramazsa, 2 gönderin ve işe yaramazsa 1 gönderin. Bu işe yaramazsa, program kötü davrandığından İKİLİ'Yİ ÇIKARIN!
Kill -9 kullanmayın. Sadece saksıyı toplamak için biçerdöver çıkarmayın.
Zombi süreci (aslında şimdi <defunct>
Olarak adlandırılıyorlar) gerçekten bir süreç değil. Bu işlem tablosuna yalnızca girdi, bu nedenle üst işlem wait()
syscall yapabilir.
Onlar için endişelenmemelisin. Herhangi bir kaynağı işgal etmezler, ebeveynleri wait()
çağrısı yapıldığında ebeveynin kendisi öldüğünde yok olurlar.
Ancak, zaten kabul edilmiş bir cevap var: zombi sürecini öldürebilirsiniz. Hata ayıklayıcı ile üst işleme ekleyin ve waitpid işlevini çağırın. Örneğin: - ebeveynin PID = 100 olduğunu, zombi işleminin PID = 200 olduğunu varsayalım
$ gdb -p 100
(gdb) call waitpid(200, 0, 0)
(gdb) quit
Tamamen yeniden yerleştirilmiş ancak süreç tablosunda hala var olan bir işlemdir. Bunu bir Yetim işlemiyle karşılaştırın, ebeveyni öldü ama hala idam ediyor.
Bir zombi sürecinin, süreç ağacındaki giriş dışında herhangi bir kaynağı yoktur. Bu, bir işlem tamamlandığında gerçekleşir, ancak üst süreç henüz reaped o (yani, wait
üzerinde düzenleme yapmamıştır).
İsterseniz bir SIGCHLD göndererek ebeveyninizi bunu yapmaya zorlayabilirsiniz (kill -20
), ebeveyne, ancak ebeveyni onurlandıracağının garantisi yoktur.
Onları genellikle kısa süreler boyunca görürsünüz (örneğin, işlem ağacını üstten kullanarak görüntülerken) - bu normaldir; Bir çocuk işleminin tamamlandığı zaman dilimi ile ana anketler arasındaki zaman diliminde, alt süreç bir zombi olarak görünecektir.
Ancak, normal olmayan zombi süreçlerini görüyorsanız - ki bu normal değildir - yine de endişelenmenize gerek yoktur - yine ölü bir sürece tahsis edilmiş kaynak olmadığından - genellikle uygulamanın boktan geliştiriciler tarafından kötü yazılmış olduğu anlamına gelir.
Zombi süreçlerinden endişelenmeniz gereken tek zaman, örneğin yukarıda belirtilen aynı boktan uygulama yük altında yer alıyorsa, çok sayıda ve çok sayıda gördüğünüz zamandır.
Çalıştığım bir sürü boktan geliştiricimiz var ve bu yüzden bu tür sorunlarla uğraşma ve bunu yaparken her türlü işe yaramaz şeyi öğrenme ayrıcalığına sahibim. Aslında - ekibim röportajlarda berbat geliştiriciler tarafından yazılan berbat Shell betiklerini kullanmak için başvurur - eğer aday betiğin gerçekten crapy olduğunu seçebilir ve bize neden berbat olduğunu söyleyebilir, kapıda iyi bir ayağı var.
Sanal av tüfeğine gelince ...
$ shoot <pid>
#!/bin/sh kurban = `ps -e -o pid, ppid | egrep "^\s * $ 1\b" | awk '{print $ 2}' ' kurban\_name = `ps -e -o pid, cmd | egrep "^\s * $ {kurban}\b" | kafa -n 1 | awk '{print $ 2}' ` # kill $ {kurban} echo" Öldürdü $ {kurban_adı}. "
Ve unutmayın: her zaman onları kafadan vurun.