Linux สนับสนุนทั้งสัญญาณที่เชื่อถือได้ของ POSIX (ต่อไปนี้คือ "สัญญาณมาตรฐาน") และสัญญาณ POSIX แบบเรียลไทม์
สัญญาณมาตรฐาน
Linux รองรับสัญญาณมาตรฐานที่ระบุไว้ด้านล่าง หมายเลขสัญญาณหลายตัวขึ้นอยู่กับสถาปัตยกรรมตามที่ระบุไว้ในคอลัมน์ "ค่า" (ในกรณีที่ได้รับค่าสามค่าค่าแรกจะเป็นค่าปกติสำหรับ alpha และ sparc ค่ากลางสำหรับ i386, ppc และ sh และค่าสุดท้ายสำหรับ mips
A - หมายถึงสัญญาณที่ขาดหายไปในสถาปัตยกรรมที่สอดคล้องกัน)
รายการในคอลัมน์ "Action" ของตารางระบุการกระทำเริ่มต้นสำหรับสัญญาณดังต่อไปนี้:
วาระ
การดำเนินการเริ่มต้นคือการยุติกระบวนการ
ign
การดำเนินการเริ่มต้นคือการละเว้นสัญญาณ
แกน
การดำเนินการเริ่มต้นคือการยุติกระบวนการและการถ่ายโอนข้อมูลหลัก
หยุด
การดำเนินการเริ่มต้นคือการหยุดกระบวนการ
ก่อนสัญญาณที่อธิบายไว้ในมาตรฐาน POSIX.1 เดิม
สัญญาณ | ราคา | การกระทำ | คิดเห็น |
หรือความตายของกระบวนการควบคุม | |||
SIGINT | 2 | วาระ | ขัดจังหวะจากแป้นพิมพ์ |
SIGQUIT | 3 | แกน | ออกจากแป้นพิมพ์ |
SIGILL | 4 | แกน | คำสั่งที่ผิดกฎหมาย |
SIGABRT | 6 | แกน | ยกเลิกสัญญาณจาก ทำแท้ง (3) |
SIGFPE | 8 | แกน | ข้อยกเว้นจุดลอยตัว |
SIGKILL | 9 | วาระ | ฆ่าสัญญาณ |
SIGSEGV | 11 | แกน | การอ้างอิงหน่วยความจำไม่ถูกต้อง |
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 สำหรับกระบวนการพื้นหลัง |
SIGTTOU | 22,22,27 | หยุด | เอาท์พุท tty สำหรับกระบวนการพื้นหลัง |
สัญญาณSIGKILL และSIGSTOP ไม่สามารถจับปิดกั้นหรือละเว้น
ถัดไปสัญญาณไม่ได้อยู่ในมาตรฐาน POSIX.1 แต่อธิบายไว้ใน SUSv2 และ SUSv3 / POSIX 1003.1-2001
สัญญาณ | ราคา | การกระทำ | คิดเห็น |
SIGPOLL | วาระ | เหตุการณ์ที่เป็นอันตราย (Sys V) พ้องของ SIGIO | |
SIGPROF | 27,27,29 | วาระ | จับเวลาโปรไฟล์หมดอายุแล้ว |
SIGSYS | 12,-,12 | แกน | อาร์กิวเมนต์ไม่ถูกต้องเป็นประจำ (SVID) |
SIGTRAP | 5 | แกน | Trace / จุดพักกับดัก |
SIGURG | 16,23,21 | ign | เงื่อนไขเร่งด่วนบนซ็อกเก็ต (4.2 BSD) |
SIGVTALRM | 26,26,28 | วาระ | นาฬิกาปลุกเสมือนจริง (4.2 BSD) |
SIGXCPU | 24,24,30 | แกน | เกินเวลาที่กำหนดของ CPU (4.2 BSD) |
SIGXFSZ | 25,25,31 | แกน | เกินขีด จำกัด ของขนาดไฟล์ (4.2 BSD) |
ถึงและรวมถึง Linux 2.2 พฤติกรรมเริ่มต้นสำหรับSIGSYS, SIGXCPU, SIGXFSZ, และ (ในสถาปัตยกรรมอื่นนอกเหนือจาก SPARC และ MIPS)SIGBUS คือการยกเลิกกระบวนการ (โดยไม่มีการถ่ายโอนข้อมูลหลัก) (ใน Unices อื่น ๆ การกระทำเริ่มต้นสำหรับSIGXCPU และSIGXFSZ คือการยุติกระบวนการโดยไม่มีการถ่ายโอนข้อมูลหลัก) Linux 2.4 สอดคล้องกับข้อกำหนด POSIX 1003.1-2001 สำหรับสัญญาณเหล่านี้การสิ้นสุดกระบวนการด้วยการถ่ายโอนข้อมูลหลัก
ถัดไปสัญญาณอื่น ๆ
สัญญาณ | ราคา | การกระทำ | คิดเห็น |
SIGEMT | 7,-,7 | วาระ | |
SIGSTKFLT | -,16,- | วาระ | ข้อผิดพลาดในกองซ้อนกัน coprocessor (ไม่ได้ใช้) |
SIGIO | 23,29,22 | วาระ | ตอนนี้ I / O เป็นไปได้ (4.2 BSD) |
SIGCLD | -,-,18 | ign | คำพ้องสำหรับ SIGCHLD |
SIGPWR | 29,30,19 | วาระ | ไฟฟ้าขัดข้อง (ระบบ V) |
SIGINFO | 29,-,- | คำพ้องสำหรับ SIGPWR | |
SIGLOST | -,-,- | วาระ | ล็อกไฟล์หายไป |
SIGWINCH | 28,28,20 | ign | สัญญาณปรับขนาดหน้าต่าง (4.3 BSD, ดวงอาทิตย์) |
SIGUNUSED | -,31,- | วาระ | สัญญาณที่ไม่ได้ใช้ (จะเป็น SIGSYS) |
(สัญญาณ 29 คือSIGINFO / SIGPWR บน alpha แต่SIGLOST เกี่ยวกับ sparc)
SIGEMT ไม่ได้ระบุไว้ใน POSIX 1003.1-2001 แต่อย่างน้อยก็จะปรากฏใน Unices อื่น ๆ ส่วนใหญ่ซึ่งการดำเนินการดีฟอลต์โดยปกติแล้วจะเป็นการยกเลิกกระบวนการที่มีการถ่ายโอนข้อมูลหลัก
SIGPWR (ซึ่งไม่ได้ระบุไว้ใน POSIX 1003.1-2001) จะถูกละเลยโดยค่าเริ่มต้นใน Unices อื่น ๆ ที่ปรากฏอยู่
SIGIO (ซึ่งไม่ได้ระบุไว้ใน POSIX 1003.1-2001) โดยค่าเริ่มต้นจะถูกละเว้นใน Unices อื่น ๆ
สัญญาณเรียลไทม์
Linux รองรับสัญญาณแบบเรียลไทม์ตามที่กำหนดไว้ในส่วนขยายแบบเรียลไทม์ POSIX.4 (และตอนนี้รวมอยู่ใน POSIX 1003.1-2001) Linux สนับสนุนสัญญาณเวลาจริง 32 ตัวซึ่งมีหมายเลขตั้งแต่ 32 (SIGRTMIN) เป็น 63 (SIGRTMAX) (โปรแกรมควรอ้างอิงถึงสัญญาณเรียลไทม์โดยใช้สัญกรณ์SIGRTMIN+ n เนื่องจากช่วงของหมายเลขสัญญาณเวลาจริงแตกต่างกันไปใน Unices)
สัญญาณแบบเรียลไทม์ไม่มีความหมายที่กำหนดไว้ล่วงหน้า: สัญญาณทั้งแบบเรียลไทม์สามารถใช้สำหรับวัตถุประสงค์ที่กำหนดไว้ในแอ็พพลิเคชัน (โปรดทราบว่าการใช้ LinuxThreads ใช้สัญญาณเรียลไทม์สามตัวแรก)
การดำเนินการเริ่มต้นสำหรับสัญญาณเวลาจริงที่ไม่ได้รับการจัดการคือการยุติกระบวนการรับ
สัญญาณเรียลไทม์มีลักษณะเด่นดังนี้:
- หลายอินสแตนซ์ของสัญญาณเรียลไทม์สามารถเข้าคิวได้ ในทางตรงกันข้ามถ้าหลายอินสแตนซ์ของสัญญาณมาตรฐานจะถูกส่งไปในขณะที่สัญญาณถูกบล็อกอยู่ในปัจจุบันจะมีเพียงอินสแตนซ์เดียวเท่านั้นที่ถูกจัดคิว
- ถ้าสัญญาณถูกส่งโดยใช้sigqueue(2) สามารถส่งค่าประกอบ (ทั้งจำนวนเต็มหรือตัวชี้) ไปพร้อมกับสัญญาณ ถ้ากระบวนการรับที่สร้างตัวจัดการสัญญาณนี้โดยใช้SA_SIGACTION flag tosigaction(2) จากนั้นจะสามารถรับข้อมูลนี้ผ่านทาง si_value ฟิลด์ของ siginfo_t โครงสร้างที่ส่งผ่านเป็นอาร์กิวเมนต์ที่สองไปยังตัวจัดการ นอกจากนี้ si_pid และ si_uid เขตข้อมูลของโครงสร้างนี้สามารถใช้เพื่อขอรับ PID และ ID ผู้ใช้จริงของกระบวนการส่งสัญญาณ
- สัญญาณเรียลไทม์จะจัดส่งในใบสั่งซื้อที่ได้รับการรับรอง ส่งสัญญาณแบบเรียลไทม์หลายชนิดในประเภทเดียวกันตามลำดับที่ส่ง ถ้ามีการส่งสัญญาณเรียลไทม์ที่ต่างกันไปให้ดำเนินกระบวนการพวกเขาจะส่งเริ่มต้นด้วยสัญญาณที่มีเลขต่ำที่สุด (เช่นสัญญาณที่มีหมายเลขต่ำมีลำดับความสำคัญสูงสุด)
ถ้าสัญญาณทั้งแบบมาตรฐานและแบบเรียลไทม์กำลังรอดำเนินการกระบวนการ POSIX จะไม่ระบุรายละเอียดที่จะส่งมอบก่อน Linux เช่นเดียวกับการใช้งานอื่น ๆ อีกมากมายให้ความสำคัญกับสัญญาณมาตรฐานในกรณีนี้
ตาม POSIX การใช้งานควรอนุญาตให้มีการจัดคิวกระบวนการในเวลาจริงอย่างน้อย _POSIX_SIGQUEUE_MAX (32) ในกระบวนการ อย่างไรก็ตามแทนที่จะวางขีด จำกัด สำหรับแต่ละขั้นตอนลินุกซ์จะใช้ขีด จำกัด ของระบบในจำนวนสัญญาณคิวเรียลไทม์ที่ถูกจัดคิวไว้สำหรับทุกกระบวนการ
สามารถดูขีด จำกัด นี้ (และมีสิทธิ์) ได้ผ่านทาง proc / sys / kernel / / rtsig สูงสุด ไฟล์. ไฟล์ที่เกี่ยวข้อง, proc / sys / kernel / / rtsig สูงสุด , สามารถใช้เพื่อหาจำนวนสัญญาณในเวลาจริงที่เข้าคิวอยู่ในขณะนี้
สอดคล้องกับ
POSIX.1
สำคัญ: ใช้ ชาย คำสั่ง ( % ชาย ) เพื่อดูว่ามีการใช้คำสั่งใดในคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณ