Çatal bombadan sonra temizlemenin en iyi yolu nedir?


21
$ ls
bash: no more processes

Ahh. Birisi çatal bomba yapmış gibi görünüyor. Eskiden çalıştığım yerde bu, paylaşılan sunucunun güç döngüsüne ihtiyaç duyması gerektiği anlamına geliyordu, çünkü kökleri olan sistem yöneticileri bile çoğu zaman sorunu çözemiyordu. Çoğu zaman, bir şey bile bulamadılar.

Birkaç püf noktası duydum (özellikle, KILL sinyalleri yerine STOP sinyalleri göndermek için, çünkü ikincisi kalan iş parçacıklarının öldürülenleri hemen değiştirmesine izin verecekti), ama So, Kendin Var Çatal Bomba mı?

Bir tane yapalım.

Yanıtlar:


10

Çatal bombasının, ulimit kullanarak kullanıcı başına makul bir işlem sınırı ile işlem sınırını tüketmesini önleyin .

Bu şekilde, tek bir kullanıcı, sistem limitine ulaşılmadan çok önce işlem kotasını tüketecek.


6

Denenecek ilk şey, oturumu kapatmak için giriş yapan kullanıcıları elde etmektir. Onların kabuğu tüm çatalları yapan işlemin ana işlemi olabilir ve bu da soruna son verebilir.

Bu işe yaramazsa, kill -STOP -2root dışındaki herhangi bir kullanıcı olarak çalışan tüm işlemleri dondurmak için root olarak çalışmayı deneyebilirsiniz . Bu işe yararsa, kill -CONT <pid>çatal bomba ile ilgili olmayan bilinen bazı işlemleri çözebilir ve tüm işlem masası sorununu ortadan kaldırmak için onları öldürebilir ve sorunun orjinal kaynağını bulup öldürmek için size biraz nefes alma odası kullanabilirsiniz. Sendmail, pid'i tanımlamak için .pid dosyasını kullanarak tanımlamanın kolay olacağı için öldürülmesi gereken bir sistem işlemine iyi bir örnek olabilir. Örneğin kill -CONT $(< /var/run/sendmail.pid); kill $(< /var/run/sendmail.pid),.


Hangi işletim sistemini öldürmek için bir "-2" seçeneği görüyorsunuz? Linux sayfasındaki man sayfasında göremiyorum.
raldi

1
Pid için negatif bir değer belirlediğiniz için bu çoğu işletim sistemlerinde çalışmalıdır. <pid> -1'den küçükse, işlem grubundaki her işleme öldürme gönderilir - <pid>. DURDURMA işaretini -2'ye göndererek, özel sistem işlemleri olmayan veya kök işlemlerine sahip olmayan tüm işlemleri durdurmalıdır.

"Negatif bir pid" i öldürmek için kill (2) man sayfasına bakınız, ancak bunun işe yaradığına hala inanmıyorum. Neden tüm init olmayan işlemler grup 2'de olsun?
Durmaktan kurtulmanın

@ephemient, 2 bir işlem grubu kimliği olamayacak kadar düşük, bu nedenle belki de başka bir özel değer.
joshudson


3

Nasıl bir STOP sinyali gönderebildiğinizden emin değilsiniz, çünkü yumurtlama killiçin mevcut bir işlem tutacağı gerekir. Ayrıca, tecrübelerime göre işlemler bitmeden uzun süre önce aşırı ve kullanılamaz hale geliyor.

Kullanıcı başına işlem sınırlarını basitçe uygulamayı düşündünüz mü ulimit? Bu, kullanıcılarınızın çatal bomba fırlatmalarını önler (yanlışlıkla ya da değil).


3
Kill, en azından bash'te yerleşik bir kabuktur.
raldi

1
Bence bu kilit bir bileşen - seçim kabuğunuz için yapıları tanımlayın.

2
Eğer yerleşik değilse, çatal kullanmayan "exec kill PID" komutunu çalıştırabilirsiniz. Fakat işe yaramıyorsa, başka bir kabuk alamayacağınız için risklidir. Sistem yönetimine arı sokması yaklaşımı gibi düşünün!
Stephen Darlington

2

Bazı BSD sistemleri, kök için son 5 ya da daha fazla işlemi ayırma kabiliyetine sahiptir. Belki sisteminizde bu yetenek vardır.


3
Sistemi gerçekten bunu yapacak şekilde nasıl yapılandırıyorsunuz?
Nik Reiman
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.