Birincisi, bu bash'a özgü değil. ATT ksh, tire ve zsh aynı şekilde davranırlar: komut satırı sürümü sırasında SIGTERM ve SIGQUIT'i yok sayarlar; mksh gelince, aynı zamanda bırakmaz ama onlara SIGINT gibi davranır.
Hem ksh kılavuzu hem de bash kılavuzu, SIGTERM'i görmezden gelmeyi şu koşullarda haklı çıkarır:
böylece kill 0interaktif bir kabuğu öldürmez
kill 0işlem grubundaki kabuğun bulunduğu tüm işlemleri öldürür . Özetle, süreç grubu bir terminalde ön planda çalışan tüm süreçlerden veya bir arka plandaki veya askıya alınmış bir işteki tüm süreçlerden oluşur.
Daha doğrusu, iş kontrolü ile modern kabuklarda olan budur . Bu tür kabuklarda, kill 0kabuk kendi başına bir süreç grubunda olacağı için yararlı olmaz. Eski kabuklar (ya da sonrasındaki modern kabuklar set +m) arka plan komutları için işlem grupları oluşturmadı. Bu yüzden, kill 0oturumu kapatmadan tüm arka plan komutlarını öldürmek için komutu kullanabilirsiniz kill 0.
Bununla birlikte, kabuğun bağışıklığının faydalı olduğu başka benzer durumlar da vardır. Bir terminali gezdiren işlemlerinizin olduğu ve oturumu kapatmadan öldürmek istediğiniz durumu düşünün. Birçok sistem pkill, bir terminalde çalışan işlemleri öldürmenize izin veren bir araca sahiptir. Sinyali yoksayan kabuk hariç, geçerli terminalde çalışan tüm işlemleri çalıştırabilir pkill -t $TTYveya pkill -QUIT -t $TTYöldürebilirsiniz.
Bir kabuk normalde kullanıcı onu terk ettiğinde ( exitya da gibi bir komutla logout) ya da terminali girişin sonunu gösterdiğinde (kullanıcı Ctrl+ tuşuna basarak buna neden olabilir D) ya da tamamen ortadan kalkar. Bu son durumda, kabuk SIGHUP sinyalini alır ve bunu görmezden gelmez.
Bir X oturumundan çıkış kill -15 -1yapma durumunuz için bunu yapar, çünkü kabuğun SIGHUP almasına neden olan terminal öykünücüsünü öldürür. Aslında X sunucusunu öldürmek yeterlidir, ancak bu işlem işlem kimliğini bulmayı gerektirir. Aynı komutun bir metin oturumunda çalışmasını istiyorsanız, kullanabilirsiniz kill -15 -1; exit. Zaten parmaklarınızın ucunda olması oldukça tehlikeli bir komut.
¹ Bu kural olarak kabuk kılavuzları belirtilmelidir görünmüyor; temel sistem çağrısının bir özelliğidir. POSIX spesifikasyonunda açıkça belirtilmiştir .
² Günümüzde bunu yapmak için, jobs -lsüreç grubu kimliğine sahip işlerin listesini görmek, ardından kill -123 -456 …işlem gruplarını öldürmek için çalıştırın.
/bin/killya da kabuk yerleşimi? İkincisi, kabuğun kendi yerleşimi ile kendini öldürmeyeceğini tahmin ediyorum.