Terlepas dari yang paling kejam kill -9
(SIGKILL), saya tidak begitu mengerti perbedaan antara 3 sinyal umum lainnya (di sini ) -HUP
(1), -INT
(2), dan -TERM
(15).
Dalam skenario mana yang akan berhasil dan yang lainnya tidak?
Secara umum kapan -9
( -KILL
) gagal?
Bagi saya, mereka tampaknya meminta proses untuk mengakhiri dengan anggun , tanpa menabung . Nilai kerasnya, saya akan menempatkan -HUP < -TERM < -INT < -KILL
.
HUP
tidak berarti program akan berhenti. Beberapa program digunakanSIGHUP
untuk memuat ulang file konfigurasi.SIGKILL
gagal, atau lebih tepatnya ditunda, ketika proses dalam tidur tidak terputus .Jawaban:
SIGKILL tidak pernah gagal untuk membunuh proses yang sedang berjalan, itulah intinya. Sinyal lain ada untuk memberi aplikasi kesempatan untuk bereaksi.
Perilaku default SIGINT, SIGTERM, SIGQUIT dan SIGHUP adalah untuk mematikan program. Namun aplikasi diizinkan untuk menginstal handler untuk sinyal-sinyal ini. Jadi perilaku sebenarnya dari aplikasi ketika mereka menerima sinyal-sinyal ini adalah masalah konvensi (yang masing-masing aplikasi mungkin atau mungkin tidak mengikuti), bukan dari desain sistem.
SIGINT adalah yang terlemah. Arti konvensionalnya adalah "hentikan apa yang Anda lakukan sekarang dan tunggu input pengguna selanjutnya". Ini sinyal yang dihasilkan oleh Ctrl+ Cdi terminal. Program non-interaktif umumnya memperlakukannya seperti SIGTERM.
SIGTERM adalah sinyal pembunuh "normal". Ini memberitahu aplikasi untuk keluar dengan bersih. Aplikasi mungkin memerlukan waktu untuk menyelamatkan negaranya, untuk membebaskan sumber daya seperti file sementara yang seharusnya tetap tertinggal, dll. Aplikasi yang tidak ingin terganggu selama aplikasi kritis mungkin mengabaikan SIGTERM untuk sementara waktu.
SIGHUP hampir sama dengan SIGTERM dalam hal kekerasan, tetapi memiliki peran khusus karena secara otomatis dikirim ke aplikasi yang berjalan di terminal ketika pengguna terputus dari terminal itu (secara etimologis, karena pengguna terhubung melalui saluran telepon dan modem menutup telepon). SIGHUP seringkali tidak disengaja, tidak seperti SIGTERM yang harus dikirim secara eksplisit, jadi aplikasi harus mencoba menyelamatkan negara mereka di SIGHUP. SIGHUP juga memiliki arti konvensional yang sangat berbeda untuk aplikasi yang tidak menghadap pengguna ( daemon ), yaitu memuat ulang file konfigurasi mereka.
SIGQUIT adalah yang paling keras dari sinyal-sinyal yang dapat diabaikan. Ini dimaksudkan untuk digunakan ketika aplikasi mengalami kesalahan dan perlu dibunuh sekarang, dan secara default itu meninggalkan file dump inti (sistem modern di mana sebagian besar pengguna tidak tahu apa file inti cenderung tidak memproduksinya secara default) . Aplikasi dapat mengatur handler tetapi harus melakukan sangat sedikit (khususnya tidak menyimpan keadaan apa pun) karena maksud dari SIGQUIT adalah untuk digunakan ketika ada sesuatu yang salah.
sumber