Daha az şiddetli öldürme sinyali arasındaki fark -HUP (1) -INT (2) ve -TERM (15)


32

En şiddetli kill -9olanların dışında (SIGKILL), diğer 3 ortak sinyalin ( burada ) -HUP(1), -INT(2) ve -TERM(15) arasındaki farkı tam olarak anlamadım .

Hangi senaryolarda biri işe yarar, diğeri olmaz mı?

Genel olarak -9( -KILL) ne zaman başarısız olur?

Bana göre, sürecin tasarruf etmeden , incelikle sona ermesini istiyorlar . Sertliği oyla, ben koyardım .-HUP < -TERM < -INT < -KILL


HUPprogramın sonlandırılacağı anlamına gelmez. Bazı programlar SIGHUPyapılandırma dosyalarını yeniden yüklemek için kullanır . SIGKILLişlem kesintisiz uykudayken başarısız olur veya ertelenir .
muru

Yanıtlar:


52

SIGKILL hiçbir zaman çalışan bir süreci öldürmeyi başaramaz , sorun bu. Uygulamaya tepki verme şansı vermek için başka sinyaller vardır.

SIGINT, SIGTERM, SIGQUIT ve SIGHUP'ın varsayılan davranışı programı öldürmektir. Ancak, uygulamaların bu sinyaller için bir işleyici kurmalarına izin verilir. Dolayısıyla, uygulamaların bu sinyalleri aldıklarında gerçek davranışları, sistem tasarımından ziyade bir kongre meselesidir (her uygulamanın izleyebileceği veya izleyemeyeceği).

SIGINT, partinin “en zayıfı” dır. Geleneksel anlamı “şu anda ne yaptığınızı durdurun ve daha fazla kullanıcı girişi için bekleyin”. Terminalde Ctrl+ tarafından üretilen sinyaldir C. Etkileşimli olmayan programlar genellikle SIGTERM gibi davranır.

SIGTERM “normal” ölüm sinyalidir. Uygulamaya temiz bir şekilde çıkmasını söyler. Uygulamanın durumunu kaydetmesi, arkada kalacak geçici dosyalar gibi serbest kaynaklara gitmesi vb. Zaman alabilir. Kritik bir uygulama sırasında kesintiye uğramak istemeyen bir uygulama SIGTERM'i bir süre göz ardı edebilir.

SIGHUP, SIGTERM ile sertlik açısından yaklaşık aynıdır, ancak belirli bir rolü vardır, çünkü kullanıcı bu terminalden bağlantısını kestiğinde otomatik olarak bir terminalde çalışan uygulamalara gönderilir (etimolojik olarak, kullanıcı telefon hattı ve modem üzerinden bağlandığı için) kapatıldı). SIGHUP genellikle açıkça gönderilmesi gereken SIGTERM'den farklı olarak istemsizdir, bu nedenle uygulamalar durumlarını bir SIGHUP'a kaydetmeye çalışmalıdır. SIGHUP ayrıca, konfigürasyon dosyasını yeniden yükleyecek olan, kullanıcıya dönük olmayan uygulamalar ( daemons ) için tamamen farklı bir geleneksel anlama da sahiptir .

SIGQUIT, göz ardı edilebilir sinyallerin en zorudur. Bir uygulamanın hatalı davranması ve şimdi öldürülmesi gerektiğinde kullanılması amaçlanmıştır ve varsayılan olarak geleneksel olarak bir çekirdek döküm dosyası bırakmıştır (çoğu kullanıcının bir çekirdek dosyanın bunları varsayılan olarak ne oluşturmadığını bilmediği modern sistemler) . Uygulamalar bir işleyici belirleyebilir ancak çok az şey yapmalıdır (özellikle herhangi bir durumu kurtarmaz) çünkü SIGQUIT'in amacı bir şeyler ciddi şekilde yanlış olduğunda kullanılmalıdır.


"Devletlerini kurtarmak" konusunda daha fazla bilgi verebilir misiniz? Eğer bir metin editöründeysem ve onu öldürürsem içeriğin kaydedilmediğini farz ediyorum.
Kenny

2
@Kenny Çoğu editör dosyayı kaydetmez, çünkü kaydetmek istemediğiniz geçici değişiklikler yapmış olabilirsiniz. Gelişmiş düzenleyiciler (örneğin vi, emacs), zaman zaman veri kaydettikleri bir otomatik kaydetme dosyasına sahiptir; SIGHUP'ta otomatik kaydetme dosyasının güncel olduğundan emin olurlar.
Gilles 'SO- kötülük' dur
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.