Skip to main content

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

WSL #1: วิธีติดตั้ง Windows Subsystem for Linux และลองลง Ubuntu ใช้งาน (อาจ 2025)

WSL #1: วิธีติดตั้ง Windows Subsystem for Linux และลองลง Ubuntu ใช้งาน (อาจ 2025)
Anonim

Linux สนับสนุนทั้งสัญญาณที่เชื่อถือได้ของ POSIX (ต่อไปนี้คือ "สัญญาณมาตรฐาน") และสัญญาณ POSIX แบบเรียลไทม์

สัญญาณมาตรฐาน

Linux รองรับสัญญาณมาตรฐานที่ระบุไว้ด้านล่าง หมายเลขสัญญาณหลายตัวขึ้นอยู่กับสถาปัตยกรรมตามที่ระบุไว้ในคอลัมน์ "ค่า" (ในกรณีที่ได้รับค่าสามค่าค่าแรกจะเป็นค่าปกติสำหรับ alpha และ sparc ค่ากลางสำหรับ i386, ppc และ sh และค่าสุดท้ายสำหรับ mips

A - หมายถึงสัญญาณที่ขาดหายไปในสถาปัตยกรรมที่สอดคล้องกัน)

รายการในคอลัมน์ "Action" ของตารางระบุการกระทำเริ่มต้นสำหรับสัญญาณดังต่อไปนี้:

วาระ

การดำเนินการเริ่มต้นคือการยุติกระบวนการ

ign

การดำเนินการเริ่มต้นคือการละเว้นสัญญาณ

แกน

การดำเนินการเริ่มต้นคือการยุติกระบวนการและการถ่ายโอนข้อมูลหลัก

หยุด

การดำเนินการเริ่มต้นคือการหยุดกระบวนการ

ก่อนสัญญาณที่อธิบายไว้ในมาตรฐาน POSIX.1 เดิม

สัญญาณราคาการกระทำคิดเห็น
หรือความตายของกระบวนการควบคุม
SIGINT2วาระขัดจังหวะจากแป้นพิมพ์
SIGQUIT3แกนออกจากแป้นพิมพ์
SIGILL4แกนคำสั่งที่ผิดกฎหมาย
SIGABRT6แกนยกเลิกสัญญาณจาก ทำแท้ง (3)
SIGFPE8แกนข้อยกเว้นจุดลอยตัว
SIGKILL9วาระฆ่าสัญญาณ
SIGSEGV11แกนการอ้างอิงหน่วยความจำไม่ถูกต้อง
SIGPIPE13วาระท่อร้าว: เขียนไปยังท่อโดยไม่มีผู้อ่าน
SIGALRM14วาระสัญญาณตั้งเวลาจาก สัญญาณเตือนภัย (2)
SIGTERM15วาระสัญญาณการสิ้นสุด
SIGUSR130,10,16วาระสัญญาณที่ผู้ใช้กำหนด 1
SIGUSR231,12,17วาระสัญญาณที่ผู้ใช้กำหนด 2
SIGCHLD20,17,18ignเด็กหยุดหรือยกเลิก
SIGCONT19,18,25 ดำเนินการต่อหากหยุดลง
SIGSTOP17,19,23หยุดหยุดกระบวนการ
SIGTSTP18,20,24หยุดหยุดพิมพ์ที่ tty
SIGTTIN21,21,26หยุดใส่ tty สำหรับกระบวนการพื้นหลัง
SIGTTOU22,22,27หยุดเอาท์พุท tty สำหรับกระบวนการพื้นหลัง

สัญญาณSIGKILL และSIGSTOP ไม่สามารถจับปิดกั้นหรือละเว้น

ถัดไปสัญญาณไม่ได้อยู่ในมาตรฐาน POSIX.1 แต่อธิบายไว้ใน SUSv2 และ SUSv3 / POSIX 1003.1-2001

สัญญาณราคาการกระทำคิดเห็น
SIGPOLL วาระเหตุการณ์ที่เป็นอันตราย (Sys V) พ้องของ SIGIO
SIGPROF27,27,29วาระจับเวลาโปรไฟล์หมดอายุแล้ว
SIGSYS12,-,12แกนอาร์กิวเมนต์ไม่ถูกต้องเป็นประจำ (SVID)
SIGTRAP5แกนTrace / จุดพักกับดัก
SIGURG16,23,21ignเงื่อนไขเร่งด่วนบนซ็อกเก็ต (4.2 BSD)
SIGVTALRM26,26,28วาระนาฬิกาปลุกเสมือนจริง (4.2 BSD)
SIGXCPU24,24,30แกนเกินเวลาที่กำหนดของ CPU (4.2 BSD)
SIGXFSZ25,25,31แกนเกินขีด จำกัด ของขนาดไฟล์ (4.2 BSD)

ถึงและรวมถึง Linux 2.2 พฤติกรรมเริ่มต้นสำหรับSIGSYS, SIGXCPU, SIGXFSZ, และ (ในสถาปัตยกรรมอื่นนอกเหนือจาก SPARC และ MIPS)SIGBUS คือการยกเลิกกระบวนการ (โดยไม่มีการถ่ายโอนข้อมูลหลัก) (ใน Unices อื่น ๆ การกระทำเริ่มต้นสำหรับSIGXCPU และSIGXFSZ คือการยุติกระบวนการโดยไม่มีการถ่ายโอนข้อมูลหลัก) Linux 2.4 สอดคล้องกับข้อกำหนด POSIX 1003.1-2001 สำหรับสัญญาณเหล่านี้การสิ้นสุดกระบวนการด้วยการถ่ายโอนข้อมูลหลัก

ถัดไปสัญญาณอื่น ๆ

สัญญาณราคาการกระทำคิดเห็น
SIGEMT7,-,7วาระ
SIGSTKFLT-,16,-วาระข้อผิดพลาดในกองซ้อนกัน coprocessor (ไม่ได้ใช้)
SIGIO23,29,22วาระตอนนี้ I / O เป็นไปได้ (4.2 BSD)
SIGCLD-,-,18ignคำพ้องสำหรับ SIGCHLD
SIGPWR29,30,19วาระไฟฟ้าขัดข้อง (ระบบ V)
SIGINFO29,-,- คำพ้องสำหรับ SIGPWR
SIGLOST-,-,-วาระล็อกไฟล์หายไป
SIGWINCH28,28,20ignสัญญาณปรับขนาดหน้าต่าง (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 flag tosigaction(2) จากนั้นจะสามารถรับข้อมูลนี้ผ่านทาง si_value ฟิลด์ของ siginfo_t โครงสร้างที่ส่งผ่านเป็นอาร์กิวเมนต์ที่สองไปยังตัวจัดการ นอกจากนี้ si_pid และ si_uid เขตข้อมูลของโครงสร้างนี้สามารถใช้เพื่อขอรับ PID และ ID ผู้ใช้จริงของกระบวนการส่งสัญญาณ
  3. สัญญาณเรียลไทม์จะจัดส่งในใบสั่งซื้อที่ได้รับการรับรอง ส่งสัญญาณแบบเรียลไทม์หลายชนิดในประเภทเดียวกันตามลำดับที่ส่ง ถ้ามีการส่งสัญญาณเรียลไทม์ที่ต่างกันไปให้ดำเนินกระบวนการพวกเขาจะส่งเริ่มต้นด้วยสัญญาณที่มีเลขต่ำที่สุด (เช่นสัญญาณที่มีหมายเลขต่ำมีลำดับความสำคัญสูงสุด)

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

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

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

สอดคล้องกับ

POSIX.1

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