Yanıtlar:
Aman Tanrım! Hayır hayır hayır. Kill -9 kullanmayın.
Sürece temiz bir şekilde şans vermez:
soket bağlantılarını kapatın
geçici dosyaları temizle
çocuklarına gittiğini söyleyin
terminal özelliklerini sıfırlayın, vb. vb.
Genel olarak, 15 gönderin ve bir veya iki saniye bekleyin ve bu işe yaramazsa, 2 gönderin ve işe yaramazsa, 1 gönderin. Bu olmazsa, BINARY'yi ÇIKARIN çünkü program kötü davranıyor!
Kill -9 kullanmayın. Saksıyı toparlamak için biçerdöverleri dışarı çıkarmayın.
Zombi süreci (aslında şimdi denir <defunct>
) aslında bir süreç değil. Bu sadece işlem tablosuna girildiğinden, ana işlem wait()
sistem çağrısı yapabilir .
Onlar için endişelenmemelisin. Herhangi bir kaynakları işgal etmiyorlar wait()
, ebeveynlerinin kendisi öldüğü zaman aradıkları zaman kaybolacaklar .
Bu tamamen ayrıştırılmış bir süreçtir ancak süreç tablosunda hala mevcuttur. Bunu , ebeveyni ölmüş, ancak halen yürütülmekte olan bir yetim süreci ile karşılaştırın .
İşte onlardan kurtulmak için bazı tavsiyeler .
Ancak kabul edilmiş bir cevap var: Zombi işlemini öldürebilirsin. Hata ayıklayıcısını ü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
Bir zombi işleminin, işlem ağacına giriş dışında, kendisine tahsis edilmiş hiçbir kaynağı yoktur. Bu süreç tamamlamalar, ancak üst süreç henüz yok ne olur hasat (yani, bunu wait
üzerine ed).
Ebeveynine bir SIGCHLD ( kill -20
) göndererek, ebeveyni bunu yapmayı deneyebilir ve zorlayabilirsiniz , ancak ebeveyin onurlandırılacağının garantisi yoktur.
Bunları sıklıkla kısa süre boyunca göreceksiniz (örneğin, üstteki işlem ağacını görüntülerken) - bu normaldir; Bir çocuk sürecinin tamamlandığı zaman ile ebeveyn bunun arasında yapılan anket arasındaki zaman diliminde - çocuk süreci bir zombi olarak görünecektir.
Ancak sürekli olarak varolan zombi süreçlerini görüyorsanız - ki bu normal değildir - yine de endişelenmeye gerek yoktur - ölü bir işleme tahsis edilmiş kaynak olmadığı için - bu genellikle uygulamanın berbat geliştiriciler tarafından yetersiz yazıldığı anlamına gelir.
Zombi işlemlerinden endişe etmeniz gereken tek zaman, örneğin çok fazla ve çok gördüğünüz zaman, örneğin yukarıda belirtilen aynı berbat uygulama yük altındaysa.
Çalıştığım yerde berbat geliştiriciler var ve bu yüzden bu tür meselelerle uğraşma ve bunu yaparken her türlü işe yaramaz şeyleri öğrenme ayrıcalığına sahibim. Aslında - ekibim sık sık röportajlarda kötü niyetli geliştiriciler tarafından yazılan berbat kabuk komut dosyalarını kullanmak için başvuruyor - eğer aday senaryo gerçekten berbat olduğunu seçebiliyorsa ve bize neden berbat olduğunu söylese, kapının önünde iyi bir ayak olduğunu söyleyebilir.
Sanal av tüfeğine gelince ...
$ shoot <pid>
#! / Bin / sh kurban = `ps -e -o pid, ppid | egrep "^ \ s * $ 1 \ b" | awk '{print $ 2}' ` victim \ _name = `ps-e -o pid, cmd | egrep "^ \ s * $ {victim} \ b" | kafa -n 1 | awk '{print $ 2}' ` #kill $ {victim} eko "Öldürülen $ {victim_name}."
Ve unutma: her zaman onları kafasından vur.
Bir zombi işlemi, yürütmeyi tamamlayan, ancak yine de işlem tablosunda listelenen bir işlemdir.
kill -9 [ana işlem_adı] , aşırı önyargıyla onu yere koyacaktır.