Isyarat - Perintah Linux / Unix

Linux menyokong kedua-dua POSIX isyarat dipercayai (selepas ini "isyarat standard") dan isyarat masa nyata POSIX.

Isyarat Standard

Linux menyokong isyarat standard disenaraikan di bawah. Beberapa nombor isyarat bergantung kepada arsitektur, seperti yang ditunjukkan dalam lajur "Nilai". (Di mana tiga nilai diberi, yang pertama biasanya sah untuk alpha dan sparc, satu pertengahan untuk i386, ppc dan sh, dan yang terakhir untuk mips.

A - menandakan bahawa isyarat tidak hadir pada seni bina yang bersesuaian.)

Penyertaan dalam lajur "Tindakan" jadual menentukan tindakan lalai untuk isyarat, seperti berikut:

Terma

Tindakan lalai adalah untuk menamatkan proses.

Ign

Tindakan lalai adalah mengabaikan isyarat.

Teras

Tindakan lalai adalah untuk menamatkan proses dan teras pembuangan.

Berhenti

Tindakan lalai adalah untuk menghentikan proses tersebut.

Mula-mula isyarat yang diterangkan dalam standard POSIX.1 asal.

Isyarat Nilai Tindakan Komen
atau kematian proses pengawalan
SIGINT 2 Terma Ganggu dari papan kekunci
SIGQUIT 3 Teras Berhenti dari papan kekunci
SIGILL 4 Teras Arahan tidak sah
SIGABRT 6 Teras Isyarat abort dari abort (3)
SIGFPE 8 Teras Pengecualian titik terapung
SIGKILL 9 Terma Membunuh isyarat
SIGSEGV 11 Teras Rujukan memori tidak sah
SIGPIPE 13 Terma Pecah paip: tulis ke paip tanpa pembaca
SIGALRM 14 Terma Isyarat pemasa dari penggera (2)
SIGTERM 15 Terma Isyarat penamatan
SIGUSR1 30,10,16 Terma Isyarat yang ditentukan pengguna 1
SIGUSR2 31,12,17 Terma Isyarat yang ditentukan pengguna 2
SIGCHLD 20,17,18 Ign Kanak-kanak berhenti atau ditamatkan
SIGCONT 19,18,25 Teruskan jika berhenti
SIGSTOP 17,19,23 Berhenti Hentikan proses
SIGTSTP 18,20,24 Berhenti Hentikan menaip pada tty
SIGTTIN 21,21,26 Berhenti input tty untuk proses latar belakang
SIGTTOU 22,22,27 Berhenti tty output untuk proses latar belakang

Isyarat SIGKILL dan SIGSTOP tidak boleh ditangkap, disekat, atau diabaikan.

Seterusnya isyarat tidak dalam piawaian POSIX.1 tetapi diterangkan dalam SUSv2 dan SUSv3 / POSIX 1003.1-2001.

Isyarat Nilai Tindakan Komen
SIGPOLL Terma Acara menarik (Sys V). Sinonim SIGIO
SIGPROF 27,27,29 Terma Pemasa profil telah tamat tempoh
SIGSYS 12, -, 12 Teras Hujah buruk terhadap rutin (SVID)
SIGTRAP 5 Teras Trace / breakpoint trap
SIGURG 16,23,21 Ign Keadaan segera di soket (4.2 BSD)
SIGVTALRM 26,26,28 Terma Jam penggera maya (4.2 BSD)
SIGXCPU 24,24,30 Teras Had masa CPU melebihi (4.2 BSD)
SIGXFSZ 25,25,31 Teras Had saiz fail melebihi (4.2 BSD)

Sehingga dan termasuk Linux 2.2, tingkah laku lalai untuk SIGSYS , SIGXCPU , SIGXFSZ , dan (pada seni bina selain SPARC dan MIPS) SIGBUS adalah untuk menamatkan proses itu (tanpa pembuangan teras). (Pada beberapa Unice lain tindakan lalai untuk SIGXCPU dan SIGXFSZ adalah untuk menamatkan proses tanpa dump teras.) Linux 2.4 mematuhi keperluan POSIX 1003.1-2001 untuk isyarat ini, menamatkan proses dengan dump teras.

Seterusnya pelbagai isyarat lain.

Isyarat Nilai Tindakan Komen
SIGEMT 7, -, 7 Terma
SIGSTKFLT -, 16, - Terma Kesalahan stack pada coprocessor (tidak digunakan)
SIGIO 23,29,22 Terma I / O kini mungkin (4.2 BSD)
SIGCLD -, -, 18 Ign Sintetik untuk SIGCHLD
SIGPWR 29,30,19 Terma Kegagalan kuasa (Sistem V)
SIGINFO 29, -, - Sinonim bagi SIGPWR
SIGLOST -, -, - Terma Kunci fail hilang
SIGWINCH 28,28,20 Ign Isyarat isyarat semula saiz (4.3 BSD, Matahari)
SIGUNUSED -, 31, - Terma Isyarat yang tidak digunakan (akan menjadi SIGSYS)

(Isyarat 29 ialah SIGINFO / SIGPWR pada alpha tetapi SIGLOST pada sparc.)

SIGEMT tidak dinyatakan dalam POSIX 1003.1-2001, tetapi tidak muncul pada kebanyakan Unice lain, di mana tindakan lalainya biasanya untuk menamatkan proses dengan dump teras.

SIGPWR (yang tidak dinyatakan dalam POSIX 1003.1-2001) biasanya diabaikan secara lalai pada Unices lain di mana ia muncul.

SIGIO (yang tidak dinyatakan dalam POSIX 1003.1-2001) diabaikan secara lalai pada beberapa Unice lain.

Isyarat masa nyata

Linux menyokong isyarat masa nyata seperti yang ditakrifkan pada POSIX.4 sambungan masa nyata (dan kini termasuk dalam POSIX 1003.1-2001). Linux menyokong 32 isyarat masa nyata, bernombor dari 32 ( SIGRTMIN ) hingga 63 ( SIGRTMAX ). (Program harus selalu merujuk kepada isyarat masa nyata menggunakan notasi SIGRTMIN + n, kerana julat nombor isyarat masa nyata berbeza-beza di Unices.)

Tidak seperti isyarat standard, isyarat masa nyata tidak mempunyai makna yang telah dipratentukan: keseluruhan set isyarat masa nyata boleh digunakan untuk tujuan yang ditentukan aplikasi. (Perhatikan, bagaimanapun, pelaksanaan LinuxThreads menggunakan tiga isyarat masa nyata pertama.)

Tindakan lalai untuk isyarat masa nyata tidak dapat ditangani adalah untuk menamatkan proses penerimaan.

Isyarat masa nyata dibezakan dengan yang berikut:

  1. Pelbagai contoh isyarat masa nyata boleh dibariskan. Sebaliknya, jika beberapa contoh isyarat piawai disampaikan semasa isyarat tersebut disekat, maka hanya satu contoh yang disandarkan.
  2. Jika isyarat dihantar menggunakan sigqueue (2), nilai yang disertakan (sama ada integer atau penunjuk) boleh dihantar dengan isyarat. Sekiranya proses penerimaan menetapkan pengendali untuk isyarat ini menggunakan bendera SA_SIGACTION untuk sigaction (2) maka ia boleh mendapatkan data ini melalui medan si_value struktur siginfo_t yang diluluskan sebagai hujah kedua kepada pengendali. Selain itu, bidang si_pid dan si_uid struktur ini boleh digunakan untuk mendapatkan PID dan ID pengguna sebenar proses menghantar isyarat.
  3. Isyarat masa nyata dihantar dalam urutan yang terjamin. Isyarat masa nyata berganda jenis yang sama dihantar dalam susunan yang dihantar. Jika isyarat masa nyata yang berbeza dihantar ke suatu proses, ia akan dihantar bermula dengan isyarat terendah. (Ie, isyarat yang bernombor rendah mempunyai keutamaan yang paling tinggi.)

Sekiranya kedua-dua isyarat piawai dan masa nyata sedang menunggu untuk proses, POSIX meninggalkannya yang tidak ditentukan yang dihantar terlebih dahulu. Linux, seperti banyak pelaksanaan lain, memberi keutamaan kepada isyarat standard dalam kes ini.

Menurut POSIX, satu perlaksanaan harus membenarkan sekurang-kurangnya _POSIX_SIGQUEUE_MAX (32) isyarat masa nyata untuk diharuskan untuk proses. Walau bagaimanapun, daripada meletakkan had setiap proses, Linux mengenakan had seluruh sistem ke atas bilangan isyarat masa nyata yang dihantarkan untuk semua proses.

Had ini boleh dilihat (dan dengan keistimewaan) diubah melalui fail / proc / sys / kernel / rtsig-max . Fail yang berkaitan, / proc / sys / kernel / rtsig-max , boleh digunakan untuk mengetahui berapa banyak isyarat masa nyata yang sedang dipertaruhkan.

MELAKUKAN KEPADA

POSIX.1

Penting: Gunakan arahan lelaki ( % man ) untuk melihat bagaimana arahan digunakan pada komputer tertentu anda.