kötü yazılmış ya da kötü performans bırakabilir Programlar zombi süreçleri Linux bilgisayarın içindeki gizlenen. zombiler nasıl oluşturulduğunu öğrenin ve nihayet onları dinlenmeye alabilirim nasıl.
Linux üzerinde Devletler Work işleyin nasıl
Linux, tabii ki, tüm uygulamalar ve bilgisayarınızda çalışan cinleri takip etmek için vardır. Bu işi yapan yollarından biri süreci tablosunu koruyarak gereğidir. Bu çekirdek bellekte yapıların listesidir. Her süreç bu konuda bazı bilgiler içermektedir Bu listedeki bir giriş içerir.
süreç tablo yapılarının her birinde büyük bir anlaşma değil. Onlar tutun işlem kimliği , Birkaç veri öğeleri, ve bu işlem için işlem kontrol bloğu (PCB) için bir işaretçi.
Linux aramak veya her işlem için ayarlaması gerekir birçok ayrıntı tutan PCB bu. PCB bir süreç oluşturulur olarak da işlem süresi göz önüne alındığında, güncellenmiş ve son olarak yok edilir.
Linux PCB üzerinde 95 alanları içerir.
Bu tanımladı
adı verilen bir yapı olarak
task_struct.h
Ve bitti 700 hatları uzun. PCB aşağıdaki bilgi türlerini içerir:
- Süreç Devlet : Durumları aşağıda açıklanmaktadır.
- Süreç Numarası : İşletim sistemi içinde Eşsiz tanımlayıcı.
- Program sayıcı Bu süreç bir sonraki CPU erişimi verilir, sistem yürütülmesi gereken işleminin bir sonraki yönerge bulmak için bu adresi kullanacak.
- Defterleri Bu işlem tarafından kullanılan işlemci kayıt listesi. Liste akümülatörler, indeks kayıtları ve yığın işaretçiler içerebilir.
- Dosya Aç Listesi : Dosyalar bu süreçte ilişkili.
- İşlemci Planlama Bilgi : Ne sıklıkta belirlemek için kullanılır, ve ne kadar süreyle, CPU işlem süresi bu sürece verilir. sürecin öncelik, zamanlama kuyruklar ve diğer zamanlama parametrelerine işaretçileri PCB kaydedilmesi gerekir.
- Bellek Yönetim Bilgi : Detaylar Böyle bellek sayfalara başlangıç ve bitiş süreci bellek adresleri ve işaretçiler olarak bu süreç kullandığı bellek, yaklaşık.
- G / Ç Durum Bilgisi : İşlem tarafından kullanılan herhangi bir giriş veya çıkış cihazları.
“Süreç Devlet” aşağıdakilerden herhangi biri olabilir:
- R: Çalışan bir ya da çalıştırılabilir proses. Koşu o CPU döngülerini alınması ve yürütülmesi ediyor anlamına gelir. Runnable süreç işlemci yuvası için kaçak ve bekleme hazırdır.
- S: Uyuyan süreci. bu usul, içi veya çıkış işlemi gibi tam olan bir aksiyon bekliyor ya da bir kaynak için kullanılabilir hale gelmesi.
- NS: süreç kesintisiz uyku durumundadır. Bu bir engelleme sistemi çağrısı kullanıyor ve sistem çağrıları tamamlayana kadar devam edemez. “Uyku” durumuna aksine, bu durumda bir süreç sistem çağrısı sinyallerine değil cevap tamamlanır edecek kadar ve yürütme sürecine geri döndü.
-
T:
aldığı için işlem sonlandırıldı (durduruldu)
SIGSTOPsinyal. Bilişim Teknoloji Sadece cevap verecektir içinSigkillveyaSIGCONTya öldürme işlemi ya da sırasıyla, devam etmek için talimat sinyallerini içine alır. Bu gelen takas zaman neler olduğunu ön plan (fg) ile arka fon (bg)görevler. -
Z:
Bir Zombi proses. Ne zaman bir süreçtir tamamlamalar, sadece ortadan yok. O kullanıyor herhangi belleği boşaltır ve bellekten kendini kaldırır, ancak sürecin masa ve PCB bunun girişini kalır. Onun devlet olarak ayarlanır
EXIT_ZOMBIEVe üst işlem, (bildirilirSigchldAlt süreç tamamlandığını sinyali).
Zombi halde, ana süreç biri aramaları
Bekle()
fonksiyonların aileleri
Çocuk süreci yaratıldığında. Sonra çocuk sürecinde bir devlet değişikliğini bekler. Çocuk süreci durduruldu, devam etti mi, ya da bir sinyalle öldürüldü mü? Kodunun doğal tamamlanmasından geçerek sonlandırıldı mı?
Durum değişikliği, çocuk işleminin çalışmayı durdurduğu anlamına gelirse, çıkış kodu okunur. Ardından, çocuğun PCB'si yok edilir ve işlem tablosundaki girişi kaldırılır. İdeal olarak, bu her şey göz açıp kapayıncaya kadar olur ve zombi devletindeki süreçler çok uzun süredir yoktur.
İLGİLİ: Linux üzerinde arka plan işlemleri nasıl çalıştırılır ve kontrol edilir
Linux'ta zombi işlemlerine neden olan nedir?
Kötü bir yazılı ebeveyn süreci arayamayabilir
Bekle()
Çocuk İşlemi Oluşturulduğunda İşlev. Bu, çocuk sürecindeki devlet değişiklikleri için hiçbir şeyin izlenmeyeceği anlamına gelir ve
Sigchld
sinyal göz ardı edilecektir. Veya, belki de başka bir uygulama, programlama veya kötü amaçlı niyet nedeniyle, ana işlemin yürütülmesini etkiliyor.
Ancak, ebeveyn işlemi, çocuk sürecinde durum değişikliklerini izlemiyorsa, uygun sistem temizliği gerçekleşmez. PCB ve işlem tablosundaki giriş, çocuk işleme sonlandırıldığında kaldırılamaz. Bu, zombi durumunun asla PCB'den çıkarılmaması sonucudur.
Zombiler biraz hafıza kullanır, ancak genellikle bir problemi oluşturmazlar. Proses tablosundaki giriş küçüktür, ancak serbest bırakılıncaya kadar, işlem kimliği tekrar kullanılamaz. 64 bitlik bir işletim sisteminde, PCB işlem tablosu girişinden çok daha büyük olduğu için herhangi bir soruna neden olmuyor.
Çok sayıda zombi, akındırılabilir, başka işlemler için ücretsiz olan bellek miktarını etkiler. Bu birçok zombiyi aldıysanız, olsa da, ana uygulama veya işletim sistemi hatasıyla ciddi bir probleminiz var.
Zombi işlemlerini nasıl kaldırılır
Zombi işlemini öldüremezsin çünkü zaten öldü. Herhangi bir sinyal vermeyecek çünkü hafızadan kaldırıldı - gönderecek hiçbir yerde yok
Sigkill
sinyal. Göndermeyi deneyebilirsin
Sigchld
Ana işlemin sinyalini, ancak çocuk işleme sonlandırıldığında işe yaramazsa, şimdi çalışması pek mümkün değildir.
Tek güvenilir çözüm, ana işlemi öldürmektir. Sonlandırıldığında, çocuk süreçleri tarafından devralınır.
içinde
Bir Linux sisteminde çalışacak ilk işlem olan işlem (işlem kimliği 1'dir).
NS
içinde
İşlem düzenli olarak gerekli zombilerin temizlenmesini gerçekleştirir, bu yüzden onları öldürmek için, onları yaratan süreci öldürmek zorundasınız. NS
Tepe
Komut, zombileriniz olup olmadığını görmek için uygun bir yoldur.
Aşağıdakileri yazın:
Üst
Bu sistemin sekiz zombi işlemi var. Biz
bunları listeleyebilir
kullanarak
ps
emretmek
ve içine borcu
egrap
. Yine, zombi işlemleri "Z," bir devlet bayrağına sahiptir ve genellikle "feshedilmiş" de göreceksiniz.
Aşağıdakileri yazın:
PS AUX | EGREP "Z | Defunct"
Zombi işlemleri listelenmiştir.
Bu, zombilerin süreç kimliklerini keşfetmenin, ileri geri gitmek yerine
Tepe
. Ayrıca "Badprg" adında bir başvurunun bu zombileri yönettiğini görüyoruz.
İlk zombi proses kimliği 7641, ancak ana işleminin işlem kimliğini bulmamız gerekiyor. Bunu kullanarak yapabiliriz
Yeniden. Çıktı seçeneğini kullanacağız (
ps
-Ö
) söylemek
ps
Sadece ebeveynin işlem kimliğini görüntülemek için ve sonra
ppid =
bayrak.
Bulmak istediğimiz süreç kullanılarak gösterilecektir.
-P
(İşlem) seçeneği ve ardından Zombie'nin işlem kimliğinde geçer.
Bu nedenle, süreci 7641 süreç bilgilerini aramak için aşağıdaki komutu yazıyoruz, ancak yalnızca ana işlemin kimliğini bildirecektir:
PS -O PPID = -P 7641
Ana işlem kimliğinin 7636 olduğunu söylemişti. Artık bunu kullanarak bu referans verebiliriz.
ps
bir kez daha.
Bunun, ebeveynlik sürecinin adıyla eşleştiğini görüyoruz. Ana işlemi öldürmek için, SIGKILL seçeneğini Öldür komutuyla aşağıdaki gibi kullanın:
Öldür -Sigkill 7636
Ana sürecin sahibine bağlı olarak, kullanmanız gerekebilir.
Sudo
.
Zombiler korkutucu değil ...
... büyük bir horde içinde olmadıkça. Birkaç kişi endişelenecek hiçbir şey değil ve basit bir yeniden başlatma onları silecek.
Ancak, bir uygulamanın veya işlemin her zaman zombileri yumurtlamasını fark ederseniz, bu bakmanız gereken bir şeydir. Büyük olasılıkla sadece özenli bir yazılı program, bu durumda, belki de çocuk süreçlerinden sonra doğru bir şekilde temizleyen güncellenmiş bir sürüm var.