Pada sistem POSIX, sinyal terminasi biasanya memiliki urutan berikut (menurut banyak halaman MAN dan Spec POSIX):
SIGTERM - dengan sopan meminta proses untuk dihentikan. Ini akan berakhir dengan anggun, membersihkan semua sumber daya (file, soket, proses anak, dll.), Menghapus file sementara dan sebagainya.
SIGQUIT - permintaan yang lebih kuat. Ini akan menghentikan ungraceful, masih membersihkan sumber daya yang benar-benar membutuhkan pembersihan, tapi mungkin tidak menghapus file sementara, mungkin menulis informasi debug di suatu tempat; pada beberapa sistem juga akan ditulis core dump (terlepas dari apakah sinyal ditangkap oleh aplikasi atau tidak).
SIGKILL - permintaan paling kuat. Proses tersebut bahkan tidak diminta untuk melakukan apapun, tetapi sistem akan membersihkan proses tersebut, apakah seperti itu atau tidak. Kemungkinan besar dump inti ditulis.
Bagaimana SIGINT cocok dengan gambaran itu? Proses CLI biasanya dihentikan oleh SIGINT ketika pengguna menekan CRTL + C, namun proses latar belakang juga dapat dihentikan oleh SIGINT menggunakan utilitas KILL. Apa yang tidak dapat saya lihat di spesifikasi atau file header adalah jika SIGINT lebih atau kurang kuat daripada SIGTERM atau jika ada perbedaan antara SIGINT dan SIGTERM sama sekali.
MEMPERBARUI:
Deskripsi terbaik tentang sinyal terminasi yang saya temukan sejauh ini ada di Dokumentasi GNU LibC . Ini menjelaskan dengan sangat baik bahwa ada perbedaan yang diinginkan antara SIGTERM dan SIGQUIT.
Dikatakan tentang SIGTERM:
Ini adalah cara normal untuk meminta penghentian program dengan sopan.
Dan dikatakan tentang SIGQUIT:
[...] dan menghasilkan core dump ketika menghentikan proses, seperti sinyal kesalahan program. Anda dapat menganggap ini sebagai kondisi kesalahan program yang “terdeteksi” oleh pengguna. [...] Jenis pembersihan tertentu sebaiknya diabaikan dalam menangani SIGQUIT. Misalnya, jika program membuat file sementara, program harus menangani permintaan penghentian lainnya dengan menghapus file sementara. Tetapi lebih baik bagi SIGQUIT untuk tidak menghapusnya, sehingga pengguna dapat memeriksanya sehubungan dengan core dump.
Dan SIGHUP juga dijelaskan dengan cukup baik. SIGHUP sebenarnya bukan sinyal penghentian, itu hanya berarti "koneksi" ke pengguna telah terputus, jadi aplikasi tidak dapat mengharapkan pengguna untuk membaca keluaran lebih lanjut (mis. Stdout / stderr output) dan tidak ada masukan yang diharapkan dari pengguna lagi. Untuk sebagian besar aplikasi, itu berarti lebih baik berhenti. Secara teori, aplikasi juga dapat memutuskan bahwa ia masuk ke mode daemon saat SIGHUP diterima dan sekarang berjalan sebagai proses latar belakang, menulis keluaran ke file log yang dikonfigurasi. Untuk kebanyakan daemon yang sudah berjalan di latar belakang, SIGHUP biasanya berarti bahwa mereka harus memeriksa ulang file konfigurasinya, jadi Anda mengirimkannya ke proses latar belakang setelah mengedit file konfigurasi.
Namun tidak ada penjelasan yang berguna tentang SIGINT di halaman ini, selain yang dikirimkan oleh CRTL + C. Apakah ada alasan mengapa seseorang menangani SIGINT dengan cara yang berbeda dari SIGTERM? Jika demikian alasan apa ini dan bagaimana penanganannya akan berbeda?
sudo fuser -l
di command prompt Anda. Bagi saya ini menunjukkan:HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS UNUSED
kill -l
daftar sinyal.