ສັນຍານ - Linux / Unix Command

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 ໃຊ້ສາມສັນຍານທີ່ໃຊ້ເວລາທໍາອິດ.)

ການປະຕິບັດໃນຕອນຕົ້ນສໍາລັບສັນຍານທີ່ໃຊ້ເວລາທີ່ບໍ່ໄດ້ຈັດການແມ່ນການຢຸດຕິຂະບວນການຮັບເອົາ.

ສັນຍານທີ່ໃຊ້ເວລາໃນໄລຍະເວລາຖືກແຍກໂດຍ:

  1. ຕົວຢ່າງຫຼາຍຂອງສັນຍາລັກທີ່ໃຊ້ເວລາທີ່ແທ້ຈິງສາມາດວາງສາຍ. ໂດຍທາງກົງກັນຂ້າມ, ຖ້າຕົວຢ່າງຫຼາຍຂອງສັນຍານມາດຕະຖານຖືກສົ່ງອອກໃນຂະນະທີ່ສັນຍານນັ້ນຖືກບລັອກແລ້ວ, ຫຼັງຈາກນັ້ນພຽງແຕ່ຫນຶ່ງຕົວຢ່າງຖືກວາງໄວ້.
  2. ຖ້າສັນຍານຖືກສົ່ງໂດຍໃຊ້ sigqueue (2), ມູນຄ່າທີ່ມາພ້ອມ (ທັງເປັນຕົວເລກຫລືຕົວຊີ້) ສາມາດຖືກສົ່ງກັບສັນຍານ. ຖ້າຂະບວນການຮັບການສ້າງຕົວຈັດການສໍາລັບສັນຍານນີ້ໂດຍໃຊ້ທຸງຊາດ SA_SIGACTION ກັບ sigaction (2) ແລ້ວມັນສາມາດໄດ້ຮັບຂໍ້ມູນນີ້ຜ່ານຊ່ອງ si_value ຂອງໂຄງສ້າງ siginfo_t ຜ່ານເປັນ argument ສອງກັບ handler. ນອກຈາກນັ້ນ, ເຂດ si_pid ແລະ si_uid ຂອງໂຄງສ້າງນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອໃຫ້ PID ແລະ ID ຜູ້ໃຊ້ຈິງຂອງຂະບວນການສົ່ງສັນຍານ.
  3. ສັນຍານທີ່ໃຊ້ເວລາທີ່ແທ້ຈິງຈະຖືກສົ່ງໄປຕາມຄໍາສັ່ງຮັບປະກັນ. ສັນຍານທີ່ໃຊ້ເວລາຫຼາຍໆຊະນິດຂອງປະເພດດຽວກັນຖືກສົ່ງໄປຕາມລໍາດັບທີ່ພວກເຂົາຖືກສົ່ງ. ຖ້າສັນຍານທີ່ໃຊ້ເວລາທີ່ແຕກຕ່າງກັນຖືກສົ່ງໄປຫາຂະບວນການ, ພວກມັນຈະຖືກສົ່ງກັບເລີ່ມຕົ້ນດ້ວຍສັນຍານທີ່ຕ່ໍາສຸດ. (ຕົວຢ່າງ, ສັນຍານຕ່ໍາມີຄວາມສໍາຄັນສູງສຸດ.)

ຖ້າສັນຍານມາດຕະຖານແລະເວລາທີ່ບໍ່ຖືກຕ້ອງສໍາລັບຂະບວນການໃດຫນຶ່ງ, POSIX ເຮັດໃຫ້ມັນບໍ່ໄດ້ລະບຸວ່າຈະຖືກສົ່ງກ່ອນ. Linux, ເຊັ່ນດຽວກັນກັບການປະຕິບັດອື່ນໆຈໍານວນຫຼາຍ, ໃຫ້ຄວາມສໍາຄັນກັບສັນຍານມາດຕະຖານໃນກໍລະນີນີ້.

ອີງຕາມ POSIX, ການປະຕິບັດຄວນອະນຸຍາດຢ່າງຫນ້ອຍ _POSIX_SIGQUEUE_MAX (32) ສັນຍານທີ່ໃຊ້ເວລາທີ່ແທ້ຈິງທີ່ຈະຈັດການກັບຂະບວນການ. ຢ່າງໃດກໍ່ຕາມ, ແທນທີ່ຈະວາງຂອບເຂດຈໍາກັດຕໍ່ຂະບວນການ, Linux ກໍານົດຂອບເຂດລະບົບທົ່ວໄປກ່ຽວກັບຈໍານວນຂອງສັນຍານທີ່ໃຊ້ເວລາທີ່ມີໄວ້ໃນເວລາສໍາລັບຂະບວນການທັງຫມົດ.

ຂໍ້ກໍານົດນີ້ສາມາດເບິ່ງໄດ້ (ແລະມີສິດທິພິເສດ) ໂດຍຜ່ານໄຟລ໌ / proc / sys / kernel / rtsig-max . ໄຟລ໌ທີ່ກ່ຽວຂ້ອງ, / proc / sys / kernel / rtsig-max , ສາມາດຖືກນໍາໃຊ້ເພື່ອຊອກຫາວິທີການສັນຍານທີ່ໃຊ້ໃນເວລາຈິງທີ່ມີຢູ່ໃນຄິວ.

ສອດຄ້ອງກັບ

POSIX1

ສິ່ງສໍາຄັນ: ໃຊ້ຄໍາສັ່ງ man ( % man ) ເພື່ອເບິ່ງວິທີການໃຊ້ຄໍາສັ່ງໃນຄອມພິວເຕີຂອງທ່ານ.