Untuk menjawab pertanyaan kedua Anda terlebih dahulu: SIGSTOP
dan SIGKILL
tidak dapat ditangkap oleh aplikasi, tetapi setiap sinyal lainnya dapat, bahkan SIGSEGV
. Properti ini berguna untuk debugging - misalnya, dengan dukungan pustaka yang tepat, Anda bisa mendengarkan SIGSEGV
dan membuat stack backtrace untuk menunjukkan di mana segfault itu terjadi.
Kata resmi (untuk Linux, apa pun yang dilakukan setiap sinyal tersedia dengan mengetikkan man 7 signal
dari baris perintah Linux. http://linux.die.net/man/7/signal memiliki informasi yang sama, tetapi tabel lebih sulit dibaca.
Namun, tanpa beberapa pengalaman dengan sinyal, sulit untuk mengetahui dari uraian singkat apa yang mereka lakukan dalam praktik, jadi inilah interpretasi saya:
Dipicu dari keyboard
SIGINT
terjadi ketika Anda menekan CTRL+C
.
SIGQUIT
dipicu oleh CTRL+\
, dan dump inti.
SIGTSTP
menunda program Anda ketika Anda menekan CTRL+Z
. Tidak seperti SIGSTOP
itu, itu dapat ditangkap, yang memberikan program seperti vi
kesempatan untuk mengatur ulang terminal ke keadaan aman sebelum menangguhkan diri.
Interaksi terminal
SIGHUP
("hangup") adalah apa yang terjadi ketika Anda menutup xterm (atau memutuskan terminal) saat program Anda sedang berjalan.
SIGTTIN
dan SIGTTOU
jeda program Anda jika mencoba membaca dari atau menulis ke terminal saat sedang berjalan di latar belakang. Agar SIGTTOU
terjadi, saya pikir program perlu ditulis /dev/tty
, bukan hanya stdout default.
Dipicu oleh pengecualian CPU
Ini berarti program Anda mencoba melakukan sesuatu yang salah.
SIGILL
berarti instruksi prosesor yang ilegal atau tidak dikenal. Ini mungkin terjadi jika Anda mencoba mengakses port I / O prosesor secara langsung, misalnya.
SIGFPE
berarti ada kesalahan matematika perangkat keras; kemungkinan besar program mencoba membaginya dengan nol.
SIGSEGV
berarti program Anda mencoba mengakses wilayah memori yang belum dipetakan.
SIGBUS
berarti program mengakses memori dengan cara yang salah; Saya tidak akan membahas detail untuk ringkasan ini.
Interaksi proses
SIGPIPE
terjadi jika Anda mencoba menulis ke pipa setelah pembaca pipa menutup ujungnya. Lihat man 7 pipe
.
SIGCHLD
terjadi ketika proses anak yang Anda buat berhenti atau ditangguhkan (oleh SIGSTOP
atau serupa).
Berguna untuk pensinyalan diri
SIGABRT
biasanya disebabkan oleh program yang memanggil abort()
fungsi, dan menyebabkan dump inti secara default. Semacam "tombol panik".
SIGALRM
disebabkan oleh alarm()
panggilan sistem, yang akan menyebabkan kernel mengirimkan SIGALRM
ke program setelah beberapa detik. Lihat man 2 alarm
dan man 2 sleep
.
SIGUSR1
dan SIGUSR2
bagaimanapun digunakan program suka. Mereka bisa berguna untuk pensinyalan antar proses.
Dikirim oleh administrator
Sinyal-sinyal ini biasanya dikirim dari command prompt, melalui kill
perintah, atau fg
atau bg
dalam kasus SIGCONT
.
SIGKILL
dan SIGSTOP
merupakan sinyal yang tidak dapat diblokir. Yang pertama selalu mengakhiri proses segera; yang kedua menunda proses.
SIGCONT
melanjutkan proses yang ditangguhkan.
SIGTERM
adalah versi yang dapat ditangkap SIGKILL
.