Bunu bir cevap olarak göndereceğim, eğer sorun ortaya çıkarsa, bir tür çözüm olması için.
0 çıkış durumu, başarılı bir programdan normal bir çıkış anlamına gelir. Mevcut bir program , çıkış durumu olarak 0 ile 255 arasındaki herhangi bir tam sayıyı seçebilir. Geleneksel olarak, programlar küçük değerler kullanır. Değerler 126 ve üstü, kabuk tarafından özel koşulları bildirmek için kullanılır, bu nedenle bunlardan kaçınmak en iyisidir.
C API seviyesinde, programlar hem programın çıkış durumunu hem de varsa onu öldüren sinyali kodlayan 16 bitlik bir durum rapor eder .
Kabukta, bir komutun çıkış durumu (kaydedilmiş $?
) programın gerçek çıkış durumunu ve sinyal değerini sınırlar: eğer bir program bir sinyal tarafından öldürülürse, $?
128'den büyük bir değere ayarlanır (çoğu kabukla, bu değer 128 artı sinyal numarası; ATT ksh 256 + sinyal numarası kullanır ve yash belirsizliği önleyen 384 + sinyal numarası kullanır, ancak diğer kabuklar buna uymamıştır).
Özellikle, $?
0 ise, programınız normal şekilde çıkıldı.
Bunun, SIGTERM alan, ancak bunun için bir sinyal işleyicisine sahip olan ve sonunda normal olarak çıkan bir işlem vakasını içerdiğini unutmayın (belki de SIGTERM sinyalinin dolaylı bir sonucu olarak).
Başlığınızdaki soruyu yanıtlamak için, SIGTERM hiçbir zaman sistem tarafından otomatik olarak gönderilmez. Bir terminal kaybolduğunda otomatik olarak SIGHUP, bir işlem yapılmaması gereken şeyleri yaptığında SIGSEGV / SIGBUS / SIGILL, otomatik olarak kesilen bir boru / sokete yazarken SIGPIPE gibi gönderilen birkaç sinyal vardır. bir terminal bir tuşa basın nedeniyle gönderilir birkaç sinyaller, ağırlıklı olarak sigint Ctrl+ Ciçin SIGQUIT Ctrl+ \ve SIGTSTP Ctrl+ Zama SIGTERM onlardan biri değildir. Bir işlem SIGTERM alırsa, başka bir işlem bu sinyali gönderdi.
Speaking kabaca konuşma