killall hepsini öldürmez ve nadiren öldürür, o zaman emri nedir?


12

Bazen killallsüreçleri öldürmek için bu komutu kullanıyorum . Zaman zaman söylememin nedeni, bazı durumlarda benim için işe yaramadı.

Kısa bir süre önce bellekte yaklaşık 5 örnek bulunan yıldırım ile ilgili bir örnekti, bu yüzden killallkomutu kullanmaya karar verdim . 2 işlemi öldürdü ve 3'ü hala hafızada kaldı. Tekrar denedim ve 3'ü hala oradaydı.

Bu yüzden kill -9her bir işlemi pids yoluyla öldürmek için komutu elle kullandım . İşe yaradı.

kill -9Komutu çoğunlukla çalıştığı gibi kullanıyorum . killallKomut Sadece bunu kullanarak zahmet etmeyin pek çok kez beni üzdüm. Ama bunun işe yaramamasının bir nedeni olmalı. Yanlış mı kullanıyorum?

Gibi başka komutlar olduğunu biliyorum pkillama killallkomutun beklendiği gibi çalışmadığını anlamak için minnettar olurum . Hatta sadece bir işlemi öldürmeye çalıştım ve bu bir hit ve özledim olayı. Ancak kill -9komut her seferinde çalışır.

Herhangi bir fikir?

Not: sudofark etmiyor

Yanıtlar:


22

Killall için adam sayfasından

killall, belirtilen komutlardan herhangi birini çalıştıran tüm işlemlere bir sinyal gönderir. Hiçbir sinyal adı belirtilmezse, SIGTERM gönderilir.

Bir yaptığınızda kill -9, SIGKILL sinyalini gönderiyorsunuz. Killall ile bir SIGKILL göndermek istiyorsanız, yapmanız gereken

killall -s SIGKILL <PROCESSNAME>

SIGKILL ve SIGTERM arasındaki farkın iyi bir açıklaması (ve neden önce SIGTERM'i denemelisiniz)

Http://rackerhacker.com/2010/03/18/sigterm-vs-sigkill/ adresinden

Unix sisteminde kill kullanarak işlemlere sinyal göndermek çoğu sistem yöneticisi için yeni bir konu değildir, ancak kill ve kill -9 arasındaki fark hakkında birçok kez bana soruldu.

Bir işlemde kill'i her kullandığınızda, aslında işleme bir sinyal gönderirsiniz (neredeyse tüm durumlarda - yakında buna gireceğim). Standart C uygulamalarında, belirli bir sinyal alırsa işlemin izlemesi gereken adımları içeren bir başlık dosyası vardır. Man sayfasını öldürmek için kontrol ederek sisteminizdeki mevcut sinyallerin tam bir listesini alabilirsiniz.

Bunun gibi bir komut düşünün:

kill 2563

Bu, işleme SIGTERM adlı bir sinyal gönderir. Süreç bildirimi aldıktan sonra, birkaç farklı şey olabilir:

  • süreç hemen durabilir
  • kaynakları temizledikten kısa bir süre sonra süreç durabilir
  • süreç süresiz olarak devam edebilir

Uygulama, bir SIGTERM alındıktan sonra ne yapmak istediğini belirleyebilir. Çoğu uygulama kaynaklarını temizleyecek ve duracak olsa da, bazıları olmayabilir. Bir uygulama, bir SIGTERM alındığında tamamen farklı bir şey yapacak şekilde yapılandırılabilir. Ayrıca, uygulama disk G / Ç'sini beklemek gibi kötü bir durumdaysa, gönderilen sinyal üzerinde işlem yapamayabilir.

Çoğu sistem yöneticisi, bir uygulama SIGTERM'e yanıt vermediğinde genellikle daha ani bir sinyale başvurur:

kill -9 2563

-9, kill komutuna SIGKILL adı verilen 9 numaralı sinyali göndermek istediğinizi bildirir. Böyle bir isimle, bu sinyalin biraz daha fazla ağırlık taşıdığı açıktır.

SIGKILL, SIGTERM ile aynı sinyal başlık dosyasında tanımlanmış olmasına rağmen, işlem tarafından göz ardı edilemez. Aslında, sinyal doğrudan çekirdek initine gittiğinden, işlem SIGKILL sinyalinden bile haberdar değildir. Bu noktada, init işlemi durduracaktır. Süreç asla sinyali yakalama ve ona göre hareket etme fırsatı elde etmez.

Ancak, çekirdek bazı durumlarda işlemi başarılı bir şekilde öldüremeyebilir. İşlem ağ veya disk G / Ç'sini bekliyorsa, çekirdek işlemi durduramaz. Zombi süreçleri ve kesintisiz bir uykuda yakalanan süreçler de çekirdek tarafından durdurulamaz. Bu işlemleri sistemden temizlemek için yeniden başlatma gerekir.

Thunderbird işlemlerine killall (SIGTERM) gönderdiğinizde, bu işlemlerin durdurulmasını istediniz. Bu süreçlerden bazıları doğru çalışmıyor (muhtemelen neden onları ilk başta öldürmeniz gerekiyordu), bu yüzden SIGTERM sinyalinde hareket edemediler.


Neden sadece bazı thunderbird örneklerini öldürdüğüne dair herhangi bir spekülasyon?
Meer Borg

@Doogfar Düzenlenmiş yazıma bakın (veya bağladığım sayfayı)
tgm4883

Teşekkürler, ayrıca Thunderbird'ümün neden bozulduğunu, öldürmek -9'un çok sert olduğunu açıklıyor
Meer Borg

Hala her zaman çalışmıyor.
Craig Hicks

4

killallile aynı sözdiziminin çoğunu kabul eder kill. Özellikle, killalleşdeğerini yapmak için süslü bir şey yazmaya gerek yoktur kill -9. Bu gayet iyi çalışıyor:

killall -9 thunderbird

(Tabii ki, tartışıldığı gibi, diğer önlemler zaten başarıyla denenmedikçe killall -9, genellikle kullanmakta veya eşdeğerde isteksiz olmalısınız killall -KILL.)


Hala her zaman çalışmaz, bu yüzden başka bir şey olmalı.
Craig Hicks
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.