POSIX sistemlerinde, sonlandırma sinyalleri genellikle aşağıdaki sıraya sahiptir (birçok MAN sayfasına ve POSIX Spesifikasyonuna göre):
SIGTERM - kibarca bir sürecin sonlandırılmasını isteyin. Tüm kaynakları (dosyalar, soketler, alt işlemler, vb.) Temizleyerek, geçici dosyaları silerek vb. Nazikçe sona erdirilecektir.
SIGQUIT - daha güçlü istek. Dikkatsizce sonlandıracak, yine de kesinlikle temizlenmesi gereken kaynakları temizleyecek, ancak geçici dosyaları silemeyecek, belki bir yere hata ayıklama bilgisi yazacaktır; bazı sistemlerde de bir çekirdek dökümü yazılacaktır (sinyalin uygulama tarafından yakalanmasına bakılmaksızın).
SIGKILL - en güçlü istek. İşlemden bir şey yapması bile istenmez, ancak sistem, istese de istemese de süreci temizleyecektir. Büyük olasılıkla bir çekirdek dökümü yazılmıştır.
SIGINT bu resme nasıl uyuyor? Bir CLI işlemi genellikle kullanıcı CRTL + C'ye ulaştığında SIGINT tarafından sonlandırılır, ancak bir arka plan işlemi de KILL yardımcı programı kullanılarak SIGINT tarafından sonlandırılabilir. Spesifikasyonlarda veya başlık dosyalarında göremediğim şey, SIGINT'in SIGTERM'den daha fazla veya daha az güçlü olması veya SIGINT ile SIGTERM arasında herhangi bir fark olup olmadığıdır.
GÜNCELLEME:
Şimdiye kadar bulduğum sonlandırma sinyallerinin en iyi açıklaması GNU LibC Dokümantasyonunda . SIGTERM ve SIGQUIT arasında amaçlanan bir fark olduğunu çok iyi açıklıyor.
SIGTERM hakkında şöyle diyor:
Bir programın kibarca sonlandırılmasını istemenin normal yolu budur.
Ve SIGQUIT hakkında yazıyor:
[...] ve süreci sonlandırdığında, tıpkı bir program hatası sinyali gibi bir çekirdek dökümü üretir. Bunu, kullanıcı tarafından "tespit edilen" bir program hatası durumu olarak düşünebilirsiniz. [...] Bazı temizleme türleri en iyi SIGQUIT'in işlenmesinde ihmal edilir. Örneğin, program geçici dosyalar oluşturuyorsa, diğer sonlandırma isteklerini geçici dosyaları silerek işlemelidir. Ancak SIGQUIT'in bunları silmemesi daha iyidir, böylece kullanıcı bunları çekirdek dökümü ile bağlantılı olarak inceleyebilir.
Ve SIGHUP da yeterince iyi açıklanıyor. SIGHUP gerçekten bir sonlandırma sinyali değildir, yalnızca kullanıcıya "bağlantının" kesildiği anlamına gelir, bu nedenle uygulama kullanıcının daha fazla çıktı (örn. Stdout / stderr çıkışı) okumasını bekleyemez ve artık kullanıcı. Çoğu uygulama için, bu, çıkmanın daha iyi olacağı anlamına gelir. Teoride bir uygulama, bir SIGHUP alındığında ve şimdi bir arka plan işlemi olarak çalışarak çıktıyı yapılandırılmış bir günlük dosyasına yazarak arka plan programı moduna geçmesine de karar verebilir. Zaten arka planda çalışan çoğu arka plan programı için, SIGHUP genellikle yapılandırma dosyalarını yeniden inceleyecekleri anlamına gelir, böylece yapılandırma dosyalarını düzenledikten sonra arka plan işlemlerine gönderirsiniz.
Ancak bu sayfada, CRTL + C ile gönderilmesi dışında SIGINT'in yararlı bir açıklaması yoktur. SIGINT'i SIGTERM'den farklı bir şekilde ele almanın herhangi bir nedeni var mı? Eğer öyleyse, bu hangi sebep olabilir ve idare nasıl farklı olur?