Linux ສະຫນັບສະຫນູນທັງສັນຍານ POSIX ທີ່ເຊື່ອຖືໄດ້ (ຕໍ່ໄປນີ້ "ສັນຍານມາດຕະຖານ") ແລະສັນຍານເວລາທີ່ແທ້ຈິງ POSIX.
Standard Signals
Linux ສະຫນັບສະຫນູນສັນຍານມາດຕະຖານທີ່ລະບຸໄວ້ຂ້າງລຸ່ມ. ຈໍານວນສັນຍານຫຼາຍແມ່ນສະຖາປັດຕະການຂຶ້ນກັບ, ດັ່ງທີ່ໄດ້ສະແດງຢູ່ໃນຖັນ "ມູນຄ່າ". (ບ່ອນທີ່ສາມຄ່າຖືກໃຫ້, ຄັ້ງທໍາອິດແມ່ນປົກກະຕິແລ້ວສໍາລັບ alpha ແລະ sparc, ກາງສໍາລັບ i386, ppc ແລະ sh, ແລະສຸດທ້າຍສໍາລັບ mips.
A - ສະແດງໃຫ້ເຫັນວ່າສັນຍານທີ່ບໍ່ມີຢູ່ໃນສະຖານະພາບທີ່ສອດຄ້ອງກັນ.)
ລາຍະການໃນຄໍລໍາ "ປະຕິບັດງານ" ຂອງຕາຕະລາງກໍານົດການປະຕິບັດໃນຕອນຕົ້ນສໍາລັບສັນຍານດັ່ງຕໍ່ໄປນີ້:
ໄລຍະເວລາ
ການປະຕິບັດຕົວຈິງແມ່ນເພື່ອຢຸດຕິຂະບວນການ.
Ign
ການປະຕິບັດຕົວຈິງແມ່ນການບໍ່ສົນໃຈສັນຍານ.
Core
ການປະຕິບັດຕົວຈິງແມ່ນການຢຸດຕິຂະບວນການແລະຈຸດສຸມ.
ຢຸດ
ການກະທໍາແບບທໍາມະດາແມ່ນເພື່ອຢຸດຂະບວນການ.
ສັນຍານທໍາອິດທີ່ໄດ້ອະທິບາຍໄວ້ໃນມາດຕະຖານ POSIX.1 ເດີມ.
ສັນຍານ | ມູນຄ່າ | ປະຕິບັດງານ | Comment |
ຫຼືເສຍຊີວິດຂອງຂະບວນການຄວບຄຸມ | |||
SIGINT | 2 | ໄລຍະເວລາ | ຂັດຂວາງຈາກແປ້ນພິມ |
SIGQUIT | 3 | Core | ອອກຈາກແປ້ນພິມ |
SIGILL | 4 | Core | ຄໍາແນະນໍາທີ່ຜິດກົດຫມາຍ |
SIGABRT | 6 | Core | ຍົກເລີກ ສັນຍານຈາກການ ຍົກເລີກ (3) |
SIGFPE | 8 | Core | ຍົກເວັ້ນຈຸດລອຍ |
SIGKILL | 9 | ໄລຍະເວລາ | Kill signal |
SIGSEGV | 11 | Core | ການອ້າງອິງຫນ່ວຍຄວາມຈໍາບໍ່ຖືກຕ້ອງ |
SIGPIPE | 13 | ໄລຍະເວລາ | ທໍ່ຫັກ: ຂຽນໃສ່ທໍ່ທີ່ບໍ່ມີຜູ້ອ່ານ |
SIGALRM | 14 | ໄລຍະເວລາ | ສັນຍານຈັບເວລາຈາກ ເຕືອນ (2) |
SIGTERM | 15 | ໄລຍະເວລາ | ສັນຍານການສິ້ນສຸດ |
SIGUSR1 | 30,10,16 | ໄລຍະເວລາ | ສັນຍານທີ່ກໍານົດໂດຍຜູ້ໃຊ້ 1 |
SIGUSR2 | 31,12,17 | ໄລຍະເວລາ | ສັນຍານທີ່ກໍານົດໂດຍຜູ້ໃຊ້ 2 |
SIGCHLD | 20,17,18 | Ign | ເດັກຢຸດຫຼືຢຸດເຊົາ |
SIGCONT | 19,18,25 | ສືບຕໍ່ຖ້າຢຸດ | |
SIGSTOP | 17,19,23 | ຢຸດ | ຢຸດຂະບວນການ |
SIGTSTP | 18,20,24 | ຢຸດ | ຢຸດການພິມຢູ່ tty |
SIGTTIN | 21,21,26 | ຢຸດ | tty input for process background |
SIGTTOU | 22,22,27 | ຢຸດ | ຜົນຜະລິດ tty ສໍາລັບຂະບວນການພື້ນຖານ |
ສັນຍານ SIGKILL ແລະ SIGSTOP ບໍ່ສາມາດຖືກຈັບ, ຖືກບລັອກ, ຫຼືບໍ່ຖືກລະເລີຍ.
ຕໍ່ໄປສັນຍານທີ່ບໍ່ໄດ້ມາດຕະຖານ POSIX.1 ແຕ່ອະທິບາຍໃນ SUSv2 ແລະ SUSv3 / POSIX 1003.1-2001.
ສັນຍານ | ມູນຄ່າ | ປະຕິບັດງານ | Comment |
SIGPOLL | ໄລຍະເວລາ | ເຫດການມົນລະພິດ (Sys V). Synonym of SIGIO | |
SIGPROF | 27,27,29 | ໄລຍະເວລາ | Timing profiling expired |
SIGSYS | 12, -, 12 | Core | ການໂຕ້ຖຽງທີ່ບໍ່ດີກັບປະຈໍາ (SVID) |
SIGTRAP | 5 | Core | Trace / trap breakpoint |
SIGURG | 16,23,21 | Ign | ເງື່ອນໄຂດ່ວນກ່ຽວກັບເຕົ້າຮັບ (4.2 BSD) |
SIGVTALRM | 26,26,28 | ໄລຍະເວລາ | ໂມງປຸກເສມືນຈິງ (42 BSD) |
SIGXCPU | 24,24,30 | Core | CPU limit exceeded (4.2 BSD) |
SIGXFSZ | 25,25,31 | Core | ຂະຫນາດຂອບເຂດຈໍາກັດຂະຫນາດ (4.2 BSD) |
ເຖິງ 22 Linux, ການປະພຶດທໍາ ອິດຂອງ SIGSYS , SIGXCPU , SIGXFSZ , ແລະ (ເທິງ architectures ອື່ນນອກເຫນືອຈາກ SPARC ແລະ MIPS) SIGBUS ແມ່ນເພື່ອຢຸດຕິຂະບວນການ (ໂດຍບໍ່ມີການສ້ອມແປງຫຼັກ). (ໃນບາງ Unices ອື່ນ ໆ ການປະຕິບັດໃນຕອນຕົ້ນສໍາລັບ SIGXCPU ແລະ SIGXFSZ ແມ່ນເພື່ອຢຸດຕິຂະບວນການທີ່ບໍ່ມີຫຼັກຖານ dump.) Linux 24 ສອດຄ່ອງກັບຄວາມຕ້ອງການ POSIX 10031-2001 ສໍາລັບສັນຍານເຫຼົ່ານີ້, ສິ້ນສຸດຂະບວນການທີ່ມີ dump ຫຼັກ.
ສັນຍານອື່ນໆຕໍ່ໄປອີກແລ້ວ.
ສັນຍານ | ມູນຄ່າ | ປະຕິບັດງານ | Comment |
SIGEMT | 7, -, 7 | ໄລຍະເວລາ | |
SIGSTKFLT | -, 16, - | ໄລຍະເວລາ | ຄວາມຜິດພາດ stack ສຸດ coprocessor (ບໍ່ໃຊ້) |
SIGIO | 23,29,22 | ໄລຍະເວລາ | ຕອນນີ້ຂ້ອຍສາມາດເຮັດໄດ້ (4.2 BSD) |
SIGCLD | -, -, 18 | Ign | ຄໍາສັບຄ້າຍຄືສໍາລັບ SIGCHLD |
SIGPWR | 29,30,19 | ໄລຍະເວລາ | ຄວາມລົ້ມເຫຼວຂອງພະລັງງານ (ລະບົບ V) |
SIGINFO | 29, -, - | ຄໍາສັບຄ້າຍຄືສໍາລັບ SIGPWR | |
SIGLOST | -, -, - | ໄລຍະເວລາ | ການລັອກແຟ້ມຫາຍໄປ |
SIGWINCH | 28,28,20 | Ign | ສັນຍານຂະຫນາດຂອງຫນ້າຈໍ (43 BSD, Sun) |
SIGUNUSED | -, 31, - | ໄລຍະເວລາ | ສັນຍານທີ່ບໍ່ໃຊ້ (ຈະເປັນ SIGSYS) |
(ສັນຍານ 29 ແມ່ນ SIGINFO / SIGPWR ກ່ຽວກັບອັນຟາແຕ່ SIGLOST ໃນ sparc.)
SIGEMT ບໍ່ໄດ້ຖືກກໍານົດໄວ້ໃນ POSIX 10031-2001, ແຕ່ບໍ່ເຄີຍເຫັນໃນສະຫະພາບເອີຣົບອື່ນໆ, ບ່ອນທີ່ການປະຕິບັດແບບທໍາອິດຂອງມັນແມ່ນປົກກະຕິແລ້ວທີ່ຈະຢຸດຕິການຂະບວນການທີ່ມີຈຸດສຸມຫຼັກ.
SIGPWR (ເຊິ່ງບໍ່ໄດ້ລະບຸໄວ້ໃນ POSIX 10031-2001) ມັກຈະຖືກປະຕິເສດຕາມປົກກະຕິໃນລະບົບ Unices ອື່ນໆທີ່ມັນຈະປາກົດ.
SIGIO (ເຊິ່ງບໍ່ໄດ້ລະບຸໄວ້ໃນ POSIX 10031-2001) ຈະຖືກຍົກເລີກໂດຍ Default ໃນ Unices ອື່ນໆອີກ.
ຕົວຊີ້ວັດທີ່ແທ້ຈິງເວລາ
Linux ສະຫນັບສະຫນູນສັນຍານທີ່ໃຊ້ໃນເວລາທີ່ໃຊ້ໃນເວລາທີ່ຖືກກໍານົດໄວ້ໃນ POSIX.4 ຂະຫຍາຍເວລາທີ່ແທ້ຈິງ (ແລະປະຈຸບັນຢູ່ໃນ POSIX 1003.1-2001). Linux ສະຫນັບສະຫນູນ 32 ສັນຍານທີ່ໃຊ້ເວລາໃນການໃຊ້ເວລາທີ່ແທ້ຈິງ, ນັບຈາກ 32 ( SIGRTMIN ) ເຖິງ 63 ( SIGRTMAX ). (ໂຄງການຄວນອ້າງອີງເຖິງສັນຍານທີ່ໃຊ້ເວລາທີ່ໃຊ້ SIGRTMIN + n, ນັບຕັ້ງແຕ່ລະດັບຂອງສັນຍານທີ່ໃຊ້ເວລາໃນເວລາທີ່ແຕກຕ່າງກັນແຕກຕ່າງກັນໃນລະບົບ Unices.)
ບໍ່ຄືກັບສັນຍານມາດຕະຖານ, ສັນຍານທີ່ໃຊ້ເວລາທີ່ແທ້ຈິງບໍ່ມີຄວາມຫມາຍທີ່ກໍານົດໄວ້ກ່ອນຫນ້ານີ້: ການຕັ້ງຄ່າສັນຍານເວລາທີ່ແທ້ຈິງສາມາດໃຊ້ສໍາລັບຈຸດປະສົງທີ່ຖືກກໍານົດໂດຍຄໍາຮ້ອງສະຫມັກ. (ຫມາຍເຫດ, ຢ່າງໃດກໍ່ຕາມ, ການປະຕິບັດ LinuxThreads ໃຊ້ສາມສັນຍານທີ່ໃຊ້ເວລາທໍາອິດ.)
ການປະຕິບັດໃນຕອນຕົ້ນສໍາລັບສັນຍານທີ່ໃຊ້ເວລາທີ່ບໍ່ໄດ້ຈັດການແມ່ນການຢຸດຕິຂະບວນການຮັບເອົາ.
ສັນຍານທີ່ໃຊ້ເວລາໃນໄລຍະເວລາຖືກແຍກໂດຍ:
- ຕົວຢ່າງຫຼາຍຂອງສັນຍາລັກທີ່ໃຊ້ເວລາທີ່ແທ້ຈິງສາມາດວາງສາຍ. ໂດຍທາງກົງກັນຂ້າມ, ຖ້າຕົວຢ່າງຫຼາຍຂອງສັນຍານມາດຕະຖານຖືກສົ່ງອອກໃນຂະນະທີ່ສັນຍານນັ້ນຖືກບລັອກແລ້ວ, ຫຼັງຈາກນັ້ນພຽງແຕ່ຫນຶ່ງຕົວຢ່າງຖືກວາງໄວ້.
- ຖ້າສັນຍານຖືກສົ່ງໂດຍໃຊ້ sigqueue (2), ມູນຄ່າທີ່ມາພ້ອມ (ທັງເປັນຕົວເລກຫລືຕົວຊີ້) ສາມາດຖືກສົ່ງກັບສັນຍານ. ຖ້າຂະບວນການຮັບການສ້າງຕົວຈັດການສໍາລັບສັນຍານນີ້ໂດຍໃຊ້ທຸງຊາດ SA_SIGACTION ກັບ sigaction (2) ແລ້ວມັນສາມາດໄດ້ຮັບຂໍ້ມູນນີ້ຜ່ານຊ່ອງ si_value ຂອງໂຄງສ້າງ siginfo_t ຜ່ານເປັນ argument ສອງກັບ handler. ນອກຈາກນັ້ນ, ເຂດ si_pid ແລະ si_uid ຂອງໂຄງສ້າງນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອໃຫ້ PID ແລະ ID ຜູ້ໃຊ້ຈິງຂອງຂະບວນການສົ່ງສັນຍານ.
- ສັນຍານທີ່ໃຊ້ເວລາທີ່ແທ້ຈິງຈະຖືກສົ່ງໄປຕາມຄໍາສັ່ງຮັບປະກັນ. ສັນຍານທີ່ໃຊ້ເວລາຫຼາຍໆຊະນິດຂອງປະເພດດຽວກັນຖືກສົ່ງໄປຕາມລໍາດັບທີ່ພວກເຂົາຖືກສົ່ງ. ຖ້າສັນຍານທີ່ໃຊ້ເວລາທີ່ແຕກຕ່າງກັນຖືກສົ່ງໄປຫາຂະບວນການ, ພວກມັນຈະຖືກສົ່ງກັບເລີ່ມຕົ້ນດ້ວຍສັນຍານທີ່ຕ່ໍາສຸດ. (ຕົວຢ່າງ, ສັນຍານຕ່ໍາມີຄວາມສໍາຄັນສູງສຸດ.)
ຖ້າສັນຍານມາດຕະຖານແລະເວລາທີ່ບໍ່ຖືກຕ້ອງສໍາລັບຂະບວນການໃດຫນຶ່ງ, POSIX ເຮັດໃຫ້ມັນບໍ່ໄດ້ລະບຸວ່າຈະຖືກສົ່ງກ່ອນ. Linux, ເຊັ່ນດຽວກັນກັບການປະຕິບັດອື່ນໆຈໍານວນຫຼາຍ, ໃຫ້ຄວາມສໍາຄັນກັບສັນຍານມາດຕະຖານໃນກໍລະນີນີ້.
ອີງຕາມ POSIX, ການປະຕິບັດຄວນອະນຸຍາດຢ່າງຫນ້ອຍ _POSIX_SIGQUEUE_MAX (32) ສັນຍານທີ່ໃຊ້ເວລາທີ່ແທ້ຈິງທີ່ຈະຈັດການກັບຂະບວນການ. ຢ່າງໃດກໍ່ຕາມ, ແທນທີ່ຈະວາງຂອບເຂດຈໍາກັດຕໍ່ຂະບວນການ, Linux ກໍານົດຂອບເຂດລະບົບທົ່ວໄປກ່ຽວກັບຈໍານວນຂອງສັນຍານທີ່ໃຊ້ເວລາທີ່ມີໄວ້ໃນເວລາສໍາລັບຂະບວນການທັງຫມົດ.
ຂໍ້ກໍານົດນີ້ສາມາດເບິ່ງໄດ້ (ແລະມີສິດທິພິເສດ) ໂດຍຜ່ານໄຟລ໌ / proc / sys / kernel / rtsig-max . ໄຟລ໌ທີ່ກ່ຽວຂ້ອງ, / proc / sys / kernel / rtsig-max , ສາມາດຖືກນໍາໃຊ້ເພື່ອຊອກຫາວິທີການສັນຍານທີ່ໃຊ້ໃນເວລາຈິງທີ່ມີຢູ່ໃນຄິວ.
ສອດຄ້ອງກັບ
POSIX1
ສິ່ງສໍາຄັນ: ໃຊ້ຄໍາສັ່ງ man ( % man ) ເພື່ອເບິ່ງວິທີການໃຊ້ຄໍາສັ່ງໃນຄອມພິວເຕີຂອງທ່ານ.