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 เพื่อ sigaction (2) แล้วจะสามารถรับข้อมูลนี้ผ่านทางฟิลด์ si_value ของโครงสร้าง siginfo_t ที่ ส่งผ่านเป็นอาร์กิวเมนต์ที่สองไปยังตัวจัดการ นอกจากนี้ยังสามารถใช้โครงสร้าง Si_ID และ Si_UID ของโครงสร้างนี้เพื่อรับ PID และ ID ผู้ใช้จริงของกระบวนการที่ส่งสัญญาณ
- สัญญาณเรียลไทม์จะจัดส่งในใบสั่งซื้อที่ได้รับการรับรอง ส่งสัญญาณแบบเรียลไทม์หลายชนิดในประเภทเดียวกันตามลำดับที่ส่ง ถ้ามีการส่งสัญญาณเรียลไทม์ที่ต่างกันไปให้ดำเนินกระบวนการพวกเขาจะส่งเริ่มต้นด้วยสัญญาณที่มีเลขต่ำที่สุด (เช่นสัญญาณที่มีหมายเลขต่ำมีลำดับความสำคัญสูงสุด)
ถ้าสัญญาณทั้งแบบมาตรฐานและแบบเรียลไทม์กำลังรอดำเนินการกระบวนการ POSIX จะไม่ระบุรายละเอียดที่จะส่งมอบก่อน Linux เช่นเดียวกับการใช้งานอื่น ๆ อีกมากมายให้ความสำคัญกับสัญญาณมาตรฐานในกรณีนี้
ตาม POSIX การใช้งานควรอนุญาตให้มีการจัดคิวกระบวนการในเวลาจริงอย่างน้อย _POSIX_SIGQUEUE_MAX (32) ในกระบวนการ อย่างไรก็ตามแทนที่จะวางขีด จำกัด สำหรับแต่ละขั้นตอนลินุกซ์จะใช้ขีด จำกัด ของระบบในจำนวนสัญญาณคิวเรียลไทม์ที่ถูกจัดคิวไว้สำหรับทุกกระบวนการ
สามารถดูขีด จำกัด นี้ (และมีสิทธิ์) ผ่านทางไฟล์ / proc / sys / kernel / rtsig-max ไฟล์ที่เกี่ยวข้อง / proc / sys / kernel / rtsig-max สามารถใช้เพื่อค้นหาจำนวนสัญญาณที่เรียลไทม์ที่ถูกจัดคิวอยู่ในปัจจุบัน
สอดคล้องกับ
POSIX.1
สำคัญ: ใช้คำสั่ง man ( % man ) เพื่อดูว่าคำสั่งถูกใช้อย่างไรในคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณ