Saya akan memposting ini sebagai jawaban sehingga ada semacam resolusi jika ini ternyata menjadi masalah.
Status keluar dari 0 berarti keluar normal dari program yang sukses. Program yang keluar dapat memilih integer antara 0 dan 255 sebagai status keluarnya. Secara konvensional, program menggunakan nilai-nilai kecil. Nilai 126 dan di atas digunakan oleh shell untuk melaporkan kondisi khusus, jadi yang terbaik adalah menghindarinya.
Pada tingkat C API, program melaporkan status 16-bit¹ yang menyandikan status keluar program dan sinyal yang membunuhnya, jika ada.
Dalam shell, status keluar perintah (disimpan dalam $?
) mengkonfigurasi status keluar sebenarnya dari program dan nilai sinyal: jika suatu program terbunuh oleh sinyal, $?
diatur ke nilai yang lebih besar dari 128 (dengan sebagian besar shell, nilai ini adalah 128 ditambah nomor sinyal; ATT ksh menggunakan 256 + nomor sinyal dan yash menggunakan 384 + nomor sinyal, yang menghindari ambiguitas, tetapi cangkang lain belum mengikutinya).
Khususnya, jika $?
0, program Anda keluar secara normal.
Perhatikan bahwa ini termasuk kasus proses yang menerima SIGTERM, tetapi memiliki pengendali sinyal untuk itu, dan akhirnya keluar secara normal (mungkin sebagai konsekuensi tidak langsung dari sinyal SIGTERM, mungkin tidak).
Untuk menjawab pertanyaan dalam judul Anda, SIGTERM tidak pernah dikirim secara otomatis oleh sistem. Ada beberapa sinyal yang dikirim secara otomatis seperti SIGHUP ketika terminal hilang, SIGSEGV / SIGBUS / SIGILL ketika suatu proses melakukan hal-hal yang seharusnya tidak dilakukan, SIGPIPE ketika menulis ke pipa / soket yang rusak, dll. Dan ada beberapa sinyal yang dikirim karena penekanan tombol di terminal, terutama SIGINT untuk Ctrl+ C, SIGQUIT untuk Ctrl+ \dan SIGTSTP untuk Ctrl+ Z, tetapi SIGTERM bukan salah satunya. Jika suatu proses menerima SIGTERM, beberapa proses lain mengirim sinyal itu.
¹ secara kasar