Kill komutunda -9 seçeneğinin amacı nedir?


Yanıtlar:


28

Ubuntu kılavuz sayfası kill, -9anahtarın amacını açıklar (kuşkusuz dalgalı bir şekilde):

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

İşte başka bir adam sayfası ne diyor.

Komut killbelirtilen sinyali belirtilen prosese veya proses grubuna gönderir. Sinyal belirtilmemişse, TERMsinyal gönderilir. TERMSinyal bu sinyali tutmazsan süreçleri öldürecektir. Diğer işlemler için, KILL( 9) sinyalini kullanmak gerekebilir , çünkü bu sinyal yakalanamaz.


Bu nedenle, -9anahtarın kullanılması işlemin etkili bir şekilde öldürülmesini sağlar. Donmuş veya tepkisiz bir işlem basit bir TERM sinyale cevap vermese bile , KILLsinyal gönderildiğinde ölecektir .


40

Kill komutu tanımlanmış gönderecek sinyali verilen bir kimlik (PID) ile bir işleme:

kill -<signal> <pid>

Elbette sadece sahip olduğumuz süreçleri öldürebiliriz, oysa kök tüm süreçleri öldürebilir. Bilgi işlem sinyallerinin güzel bir özeti için Wikipedia'ya bakın .

killGönderebileceğiniz sinyaller kılavuzda listelenmiştir . Sinyal isim veya numara ile gösterilebilir. Herhangi bir sinyal verilmezse, varsayılan sinyal 15 cevap. TERMkullanıldı.

Bu nedenle, aşağıdaki üç komut da aynıdır:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

Aradaki fark SIGTERMve SIGKILLbir uygulamanın sinyal üzerinde hareket edebilme şeklidir:

  • TERM: Bir uygulama sonlandırılabilir, yani bir kapatma yordamını düzgün şekilde çalıştırabilir.
  • KILL: başvurular derhal durdurulur ve durdurulur (bu, bazı durumlarda varsayılan bir kazayı bildirmek için veri kaybına veya yükselmeye neden olabilir).

16

Aşağıdakilerin hepsinin eşanlamlı olduğunu unutmayın:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

Sinyal işleme dünyasında, SIGKILL'in , işletim sistemi tarafından program tarafından ele alınan birkaç benzersiz sistemden biri olduğuna dikkat çekiyor . Çalıştırdığınızda kill -9, uygulamaya kendisini sonlandırmasını söylemiyorsunuz, bunun yerine işletim sistemine programı çalıştırmayı bırakmasını söylüyorsunuz, programın ne yaptığı önemli değil.

SIGKILL gönderildikten sonra program derhal durdurulur. Program adına herhangi bir çekirdek çağrısı çalışıyorsa (örn. Dosya GÇ), bu çağrılar çağrıya bağlı olarak bitinceye kadar devam edebilir veya çalışmayabilir, ancak programın kendisi artık çalışmayacaktır. Not takip bir hata ayıklayıcı altında çalışan görevler veya görevleri farklı burada davranabilir.

Engellenemeyen diğer sinyal de benzer etkiye sahip olan SIGSTOP'tur , ancak programı dondurur ; SIGCONT'u daha sonra devam ettirmek için gönderebilirsiniz . Bu davranış tamamen işletim sistemi tarafından kontrol edilir ve program önceden bir bildirim almaz.

Diğer tüm sinyaller programa gönderilir; seçtiği halde onları idare edebilir veya sinyali yoksayarsa, varsayılan bir davranış izlenir.

İşte size bir işleme gönderirken kendinizi bulabileceğiniz birkaç yararlı sinyal:

  • SIGHUP - mesele
    kullanıcı (kapatıldı mesela SSH oturumu veya terminal penceresi) kesilmiş programı söyler.
    Genellikle programın zarif bir şekilde kapatılmasını sağlar.
  • SIGINT - interrupt Vurduğunuzda
    gönderilir CTRL+ C
    Genellikle "yaptığınız şeyi durdurur" anlamına gelir - programı öldürebilir veya öldürmeyebilir
  • SIGTERM - sonlandırmak
    tarafından gönderilen varsayılan killve killall.
    Genellikle programı sonlandırır ... bazen program ne yaptığını bitirdikten sonra.
  • SIGSTOP - durdur tuşuna bastığınızda
    gönderilir CTRL+ Z
    Programı duraklatır, yukarıda tartışılır
  • SIGPIPE - boru kapalı
    Programa boru hattının kapalı olduğunu söyler. Genellikle programı sonlandırır.
    Örneğin cat /etc/passwd | head -n1, SIGPIPE catilk satırın yazdırılmasından sonraki sürece gönderilir ve bu catda tüm dosyayı bitirmeden önce sonlanmasına neden olur .

Tüm bu sinyaller kendi ayarlarında "doğal olarak" gerçekleşirken, istenen sonucu elde etmek için bir durumu taklit etmek için sinyali kullanabilirsiniz.

Örneğin, birinin SSH oturumunu sonlandırmak istiyorsanız, işlemi basit bir şekilde öldürebilirsiniz, ancak bunu yaparak güvenlik nedeniyle önemli olabilecek HISTORY dosyasını güncellemesini önleyeceksiniz. Fakat bunun yerine bunu SIGHUP'a gönderirseniz , süreç bağlantının öldüğünü varsayar ve standart temizliğini yapar.


Ctrl + \ gönderir SIGQUIT, burada varsayılan eylem çekirdek doldurup sonlandırmaktır. Bir program çok yanlış bir şey yapıyorsa, hemen durdurmanız gerekir ve daha sonra hata ayıklamak istiyorsanız bu kullanılabilir.
Simon Richter

@SimonRichter Oh, haklısın. sabit.
tylerl

6

öldür -9 Anlamı: Süreç çekirdek tarafından öldürülecek; bu sinyal göz ardı edilemez. 9, yakalanamayan veya tutuşamayan KILL sinyalini ifade eder.

Kullanım Alanları: SIGKILL singal

Kill Anlamı: Herhangi bir sinyal olmadan kill komutu, işlemi normal şekilde sonlandıran 15 sinyalini geçer.

Kullanım Alanları: Programcılar tarafından idare edilebilecek SIGTERM sinyali

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.