Linux zombi sürecini nasıl ele alır?


12

Zombi süreçleri Unix / Linux sistemlerinde oluşturulur. Bunları killkomutla kaldırabiliriz .

Ancak Linux'ta zombi süreçlerini idare etmek için yerleşik bir temizleme mekanizması var mı?

Yanıtlar:


18

Zombi süreçleri çoktan öldü. Onları öldüremezsin. killKomutu veya sistem çağrısı bir zombi süreci üzerinde hiçbir etkisi yoktur. (Bir zombi ile birlikte gidebilirsin kill, ama bir dakika içinde göreceğimiz gibi, zombi değil ebeveyni vurmalısın.)

Bir zombi süreci aslında bir süreç değildir, sadece süreç tablosundaki bir giriştir. Zombi işlemiyle ilişkili başka kaynak yok: belleği veya çalışan kodu yok, dosyaları açık tutmuyor vb.

Bir süreç öldüğünde, diğer tüm kaynaklar temizlendikten sonra yapılacak son şey, süreç tablosundaki girdidir. Bu giriş, üst sürecin çocuğun çıkış durumunu izlemesine izin vermek için bir zombi oluşturacak şekilde tutulur. Ebeveyn çıkış durumunu wait, sistem çağrıları ailesinden birini çağırarak okur ; bu noktada zombi kaybolur. Çağrı waitisimli söylenen biçmek bir zombi metaforunu ölü olmak ancak bir şekilde hala tam olarak ölümden sonraki hayata işlenmez uzanan, çocuk. Ebeveyn (veya arayarak SIGCHLD sinyalini görmezden gelerek onu umursamıyor olması da gösterebilir sigactionile SA_NOCLDWAITbu durumda işlem tablosunda girişi derhal zaman çocuk ölür silinir, bayrak).

Böylece bir zombi sadece bir süreç öldüğünde ve ebeveyni waithenüz çağırmadığında var olur . Bu durum ancak ebeveyn hala çalıştığı sürece devam edebilir. Ebeveyn çocuktan önce ölürse veya çocuğun durumunu okumadan ölürse, zombi üst süreci PID 1 ile işleme ayarlanır init. İşlerinden biri, bir döngüyü initçağırmak waitve böylece ebeveyninin geride bıraktığı herhangi bir zombi sürecini toplamaktır.


6

Bilemezsin killo zaten ölü gibi bir zombi sürecini.

Zombi süreçleri waitebeveynleri tarafından düzenlenmelidir, böylece çıkış durumları toplanır.

Linux'ta bulunan tek "yerleşik temizleme mekanizması", herhangi bir üst sürecin çocuklarının çıkış durumunu toplamadan önce ölmesi durumunda işe yarar. Bu durumda, her çocuk, çocuk üzerinde çıkış durumunu toplayacak ve işlem tablosundaki girişini kaldıracak initolan süreç tarafından miras alınır wait.


3

Bir sürecin ebeveyni ölür ölmez, süreç bir yetim haline gelir - zombi olup olmadığını göz ardı ederek. Yetimlere ne olur? Yeni bir ebeveyn alırlar init. initolacak waito nedenle yetim kavuşurken, toplanan her yetim üzerinde (aynı zamanda sıra bir zombi olmuş olabilir).


1
Hayır. Kesin olmak, herhangi bir işlemi initöldürmez . Durumlarını toplamak sadece çocuklarının üzerindedir. wait
chrk

1
@chrk, Philipp: olağan terim biçmek .
Gilles 'SO- kötü olmayı kes'

1

Hayır, zombiler için yerleşik bir temizleme mekanizması yoktur. Zombiler, ebeveynleri öldürüldükten sonra zombi cennetine gider. O zamana kadar işletim sistemi, çıkış durumunu üst öğeye döndürmelerini sağlar.


yani .. bu bellek vb olumsuz etkisi var mı?

1
zombi kalıpların ebeveyn, ne zaman aslında initsüreç devralır ve arayacak waitonu

Hayır, işlem tablosuna giriş dışında, sürece ayrılan tüm kaynaklar serbest bırakılır.
unxnut
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.