สัญญาณ - คำสั่ง Linux / Unix

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 ใช้สัญญาณเรียลไทม์สามตัวแรก)

การดำเนินการเริ่มต้นสำหรับสัญญาณเวลาจริงที่ไม่ได้รับการจัดการคือการยุติกระบวนการรับ

สัญญาณเรียลไทม์มีลักษณะเด่นดังนี้:

  1. หลายอินสแตนซ์ของสัญญาณเรียลไทม์สามารถเข้าคิวได้ ในทางตรงกันข้ามถ้าหลายอินสแตนซ์ของสัญญาณมาตรฐานจะถูกส่งไปในขณะที่สัญญาณถูกบล็อกอยู่ในปัจจุบันจะมีเพียงอินสแตนซ์เดียวเท่านั้นที่ถูกจัดคิว
  2. ถ้าสัญญาณถูกส่งโดยใช้ sigqueue (2) สามารถส่งค่าประกอบ (ทั้งจำนวนเต็มหรือตัวชี้) ไปพร้อมกับสัญญาณ ถ้ากระบวนการรับที่สร้างตัวจัดการสัญญาณนี้โดยใช้ธง SA_SIGACTION เพื่อ sigaction (2) แล้วจะสามารถรับข้อมูลนี้ผ่านทางฟิลด์ si_value ของโครงสร้าง siginfo_t ที่ ส่งผ่านเป็นอาร์กิวเมนต์ที่สองไปยังตัวจัดการ นอกจากนี้ยังสามารถใช้โครงสร้าง Si_ID และ Si_UID ของโครงสร้างนี้เพื่อรับ PID และ ID ผู้ใช้จริงของกระบวนการที่ส่งสัญญาณ
  3. สัญญาณเรียลไทม์จะจัดส่งในใบสั่งซื้อที่ได้รับการรับรอง ส่งสัญญาณแบบเรียลไทม์หลายชนิดในประเภทเดียวกันตามลำดับที่ส่ง ถ้ามีการส่งสัญญาณเรียลไทม์ที่ต่างกันไปให้ดำเนินกระบวนการพวกเขาจะส่งเริ่มต้นด้วยสัญญาณที่มีเลขต่ำที่สุด (เช่นสัญญาณที่มีหมายเลขต่ำมีลำดับความสำคัญสูงสุด)

ถ้าสัญญาณทั้งแบบมาตรฐานและแบบเรียลไทม์กำลังรอดำเนินการกระบวนการ POSIX จะไม่ระบุรายละเอียดที่จะส่งมอบก่อน Linux เช่นเดียวกับการใช้งานอื่น ๆ อีกมากมายให้ความสำคัญกับสัญญาณมาตรฐานในกรณีนี้

ตาม POSIX การใช้งานควรอนุญาตให้มีการจัดคิวกระบวนการในเวลาจริงอย่างน้อย _POSIX_SIGQUEUE_MAX (32) ในกระบวนการ อย่างไรก็ตามแทนที่จะวางขีด จำกัด สำหรับแต่ละขั้นตอนลินุกซ์จะใช้ขีด จำกัด ของระบบในจำนวนสัญญาณคิวเรียลไทม์ที่ถูกจัดคิวไว้สำหรับทุกกระบวนการ

สามารถดูขีด จำกัด นี้ (และมีสิทธิ์) ผ่านทางไฟล์ / proc / sys / kernel / rtsig-max ไฟล์ที่เกี่ยวข้อง / proc / sys / kernel / rtsig-max สามารถใช้เพื่อค้นหาจำนวนสัญญาณที่เรียลไทม์ที่ถูกจัดคิวอยู่ในปัจจุบัน

สอดคล้องกับ

POSIX.1

สำคัญ: ใช้คำสั่ง man ( % man ) เพื่อดูว่าคำสั่งถูกใช้อย่างไรในคอมพิวเตอร์เครื่องใดเครื่องหนึ่งของคุณ