Sinyal - Linux / Perintah Unix

Linux mendukung kedua sinyal POSIX yang dapat diandalkan (selanjutnya disebut "sinyal standar") dan sinyal POSIX real-time.

Sinyal Standar

Linux mendukung sinyal standar yang tercantum di bawah ini. Beberapa nomor sinyal bergantung pada arsitektur, seperti yang ditunjukkan pada kolom "Nilai". (Di mana tiga nilai diberikan, yang pertama biasanya valid untuk alpha dan sparc, yang tengah untuk i386, ppc dan sh, dan yang terakhir untuk mips.

A - menunjukkan bahwa sinyal tidak ada pada arsitektur yang sesuai.)

Entri dalam kolom "Tindakan" pada tabel menentukan tindakan default untuk sinyal, sebagai berikut:

Istilah

Tindakan default adalah menghentikan proses.

Ign

Tindakan standar adalah mengabaikan sinyal.

Inti

Tindakan default adalah menghentikan proses dan membuang inti.

Berhenti

Tindakan default adalah menghentikan proses.

Pertama-tama sinyal yang dijelaskan dalam standar POSIX.1 asli.

Sinyal Nilai Tindakan Komentar
atau kematian proses pengendalian
SIGINT 2 Istilah Interupsi dari keyboard
SIGQUIT 3 Inti Keluar dari keyboard
SIGILL 4 Inti Instruksi Illegal
SIGABRT 6 Inti Abort sinyal dari batalkan (3)
SIGFPE 8 Inti Pengecualian floating point
SIGKILL 9 Istilah Bunuh sinyal
SIGSEGV 11 Inti Referensi memori tidak valid
SIGPIPE 13 Istilah Pipa rusak: menulis ke pipa tanpa pembaca
SIGALRM 14 Istilah Sinyal pengatur waktu dari alarm (2)
SIGTERM 15 Istilah Sinyal pemutusan
SIGUSR1 30,10,16 Istilah Sinyal yang ditentukan pengguna 1
SIGUSR2 31,12,17 Istilah Sinyal yang ditentukan pengguna 2
SIGCHLD 20,17,18 Ign Anak berhenti atau dihentikan
SIGCONT 19,18,25 Lanjutkan jika dihentikan
SIGSTOP 17,19,23 Berhenti Hentikan proses
SIGTSTP 18,20,24 Berhenti Berhenti mengetik di tty
SIGTTIN 21,21,26 Berhenti masukan tty untuk proses latar belakang
SIGTTOU 22,22,27 Berhenti tty output untuk proses latar belakang

Sinyal SIGKILL dan SIGSTOP tidak dapat ditangkap, diblokir, atau diabaikan.

Selanjutnya sinyal tidak dalam standar POSIX.1 tetapi dijelaskan dalam SUSv2 dan SUSv3 / POSIX 1003.1-2001.

Sinyal Nilai Tindakan Komentar
SIGPOLL Istilah Acara yang bisa diserbuki (Sys V). Sinonim dari SIGIO
SIGPROF 27,27,29 Istilah Pengatur waktu profil kedaluwarsa
SIGSYS 12, -, 12 Inti Argumen buruk ke rutin (SVID)
SIGTRAP 5 Inti Trace / breakpoint trap
SIGURG 16,23,21 Ign Kondisi mendesak pada soket (4.2 BSD)
SIGVTALRM 26,26,28 Istilah Jam alarm virtual (4.2 BSD)
SIGXCPU 24,24,30 Inti Batas waktu CPU terlampaui (4.2 BSD)
SIGXFSZ 25,25,31 Inti Batas ukuran file terlampaui (4.2 BSD)

Hingga dan termasuk Linux 2.2, perilaku default untuk SIGSYS , SIGXCPU , SIGXFSZ , dan (pada arsitektur selain SPARC dan MIPS) SIGBUS adalah untuk mengakhiri proses (tanpa dump inti). (Pada beberapa Unices lain, tindakan default untuk SIGXCPU dan SIGXFSZ adalah untuk menghentikan proses tanpa dump inti.) Linux 2.4 memenuhi persyaratan POSIX 1003.1-2001 untuk sinyal-sinyal ini, mengakhiri proses dengan dump inti.

Berikutnya berbagai sinyal lainnya.

Sinyal Nilai Tindakan Komentar
SIGEMT 7, -, 7 Istilah
SIGSTKFLT -, 16, - Istilah Tumpukan kesalahan pada coprocessor (tidak digunakan)
SIGIO 23,29,22 Istilah I / O sekarang mungkin (4.2 BSD)
SIGCLD -, -, 18 Ign Sinonim untuk SIGCHLD
SIGPWR 29,30,19 Istilah Kegagalan daya (Sistem V)
SIGINFO 29, -, - Sinonim untuk SIGPWR
SIGLOST -, -, - Istilah Kunci file hilang
SIGWINCH 28,28,20 Ign Sinyal pengubahan ukuran jendela (4.3 BSD, Sun)
SIGUNUS -, 31, - Istilah Sinyal yang tidak digunakan (akan menjadi SIGSYS)

(Sinyal 29 adalah SIGINFO / SIGPWR pada alpha tetapi SIGLOST pada sparc.)

SIGEMT tidak ditentukan dalam POSIX 1003.1-2001, tetapi tidak pernah muncul pada kebanyakan Unices lainnya, di mana tindakan defaultnya biasanya untuk mengakhiri proses dengan dump inti.

SIGPWR (yang tidak ditentukan dalam POSIX 1003.1-2001) biasanya diabaikan secara default pada Unix lain di mana ia muncul.

SIGIO (yang tidak ditentukan dalam POSIX 1003.1-2001) diabaikan secara default pada beberapa Unices lainnya.

Sinyal real-time

Linux mendukung sinyal real-time sebagaimana aslinya didefinisikan dalam POSIX.4 ekstensi waktu nyata (dan sekarang termasuk dalam POSIX 1003.1-2001). Linux mendukung 32 sinyal real-time, dari 32 ( SIGRTMIN ) hingga 63 ( SIGRTMAX ). (Program harus selalu mengacu pada sinyal real-time menggunakan notasi SIGRTMIN + n, karena rentang jumlah sinyal real-time bervariasi di seluruh Unices.)

Tidak seperti sinyal standar, sinyal real-time tidak memiliki arti yang telah ditentukan: seluruh rangkaian sinyal real-time dapat digunakan untuk tujuan yang ditentukan aplikasi. (Perhatikan, bagaimanapun, bahwa implementasi LinuxThreads menggunakan tiga sinyal real-time pertama.)

Tindakan default untuk sinyal real-time yang tidak tertangani adalah mengakhiri proses penerimaan.

Sinyal real-time dibedakan sebagai berikut:

  1. Beberapa contoh dari sinyal real-time dapat diantrekan. Sebaliknya, jika beberapa contoh dari sinyal standar dikirimkan ketika sinyal tersebut saat ini diblokir, maka hanya satu contoh yang diantrekan.
  2. Jika sinyal dikirim menggunakan sigqueue (2), nilai yang menyertainya (baik integer atau pointer) dapat dikirim dengan sinyal. Jika proses penerimaan menetapkan handler untuk sinyal ini menggunakan flag SA_SIGACTION ke sigaction (2) maka dapat memperoleh data ini melalui bidang si_value dari struktur siginfo_t yang dikirimkan sebagai argumen kedua ke handler. Selanjutnya, bidang si_pid dan si_uid struktur ini dapat digunakan untuk mendapatkan PID dan ID pengguna nyata dari proses pengiriman sinyal.
  3. Sinyal real-time dikirim dalam pesanan yang terjamin. Beberapa sinyal real-time dari jenis yang sama dikirim dalam urutan yang dikirim. Jika sinyal real-time yang berbeda dikirim ke suatu proses, sinyal tersebut dikirimkan mulai dengan sinyal bernomor terendah. (Yaitu, sinyal bernomor rendah memiliki prioritas tertinggi.)

Jika kedua sinyal standar dan real-time menunggu proses, POSIX meninggalkannya tidak ditentukan yang dikirim lebih dulu. Linux, seperti banyak implementasi lainnya, memberikan prioritas pada sinyal standar dalam kasus ini.

Menurut POSIX, sebuah implementasi harus mengizinkan setidaknya _POSIX_SIGQUEUE_MAX (32) sinyal waktu nyata untuk diantrekan ke suatu proses. Namun, daripada menempatkan batas per-proses, Linux menerapkan batas seluruh sistem pada jumlah antrian sinyal waktu nyata untuk semua proses.

Batas ini dapat dilihat (dan dengan hak istimewa) diubah melalui file / proc / sys / kernel / rtsig-max . File yang terkait, / proc / sys / kernel / rtsig-max , dapat digunakan untuk mencari tahu berapa banyak sinyal real-time yang sedang diantrekan.

MENYAMPAIKAN

POSIX.1

Penting: Gunakan perintah man ( % man ) untuk melihat bagaimana perintah digunakan pada komputer khusus Anda.