เพื่อที่จะตอบคำถามที่สองครั้งแรกของคุณ: SIGSTOP
และSIGKILL
ไม่สามารถจับโดยการประยุกต์ใช้ แต่ทุกสัญญาณอื่น ๆ SIGSEGV
แม้ คุณสมบัตินี้มีประโยชน์สำหรับการดีบักตัวอย่างเช่นด้วยการสนับสนุนSIGSEGV
ไลบรารี่ที่ถูกต้องคุณสามารถฟังและสร้าง backtrace สแต็กเพื่อแสดงตำแหน่งที่ segfault นั้นเกิดขึ้น
คำอย่างเป็นทางการ (สำหรับ Linux อยู่แล้ว) ในสิ่งที่แต่ละสัญญาณมีให้โดยพิมพ์man 7 signal
จากบรรทัดคำสั่ง Linux http://linux.die.net/man/7/signalมีข้อมูลเหมือนกัน แต่ตารางอ่านยาก
อย่างไรก็ตามไม่มีประสบการณ์เกี่ยวกับสัญญาณมันยากที่จะรู้จากคำอธิบายสั้น ๆ ว่าพวกเขาทำอะไรในทางปฏิบัติดังนั้นนี่คือการตีความของฉัน:
ถูกกระตุ้นจากแป้นพิมพ์
SIGINT
CTRL+C
ที่เกิดขึ้นเมื่อคุณกด
SIGQUIT
ถูกกระตุ้นโดยCTRL+\
และทิ้งแกน
SIGTSTP
CTRL+Z
ระงับโปรแกรมของคุณเมื่อคุณกด ซึ่งแตกต่างจากSIGSTOP
มันจับได้ซึ่งให้โปรแกรมเช่นvi
โอกาสที่จะรีเซ็ต terminal เป็นสถานะที่ปลอดภัยก่อนที่จะระงับตัวเอง
การโต้ตอบกับเทอร์มินัล
SIGHUP
("hangup") คือสิ่งที่เกิดขึ้นเมื่อคุณปิด xterm (หรือยกเลิกการเชื่อมต่อเทอร์มินัล) ในขณะที่โปรแกรมกำลังทำงาน
SIGTTIN
และSIGTTOU
หยุดโปรแกรมชั่วคราวหากพยายามอ่านหรือเขียนลงในเทอร์มินัลขณะที่ทำงานในพื้นหลัง เพื่อที่SIGTTOU
จะเกิดขึ้นฉันคิดว่าโปรแกรมต้องเขียนถึง/dev/tty
ไม่ใช่แค่ stdout เริ่มต้นเท่านั้น
ถูกเรียกโดยข้อยกเว้นซีพียู
สิ่งเหล่านี้หมายถึงโปรแกรมของคุณพยายามทำสิ่งผิดปกติ
SIGILL
หมายถึงคำสั่งโปรเซสเซอร์ที่ผิดกฎหมายหรือไม่รู้จัก สิ่งนี้อาจเกิดขึ้นหากคุณพยายามเข้าถึงพอร์ต I / O ของโปรเซสเซอร์โดยตรง
SIGFPE
หมายความว่ามีข้อผิดพลาดทางคณิตศาสตร์ฮาร์ดแวร์ โปรแกรมส่วนใหญ่พยายามที่จะหารด้วยศูนย์
SIGSEGV
หมายถึงโปรแกรมของคุณพยายามเข้าถึงพื้นที่หน่วยความจำที่ไม่ได้แมป
SIGBUS
หมายถึงโปรแกรมเข้าถึงหน่วยความจำไม่ถูกต้องด้วยวิธีอื่น ฉันจะไม่ลงรายละเอียดสำหรับการสรุปนี้
ปฏิสัมพันธ์ของกระบวนการ
SIGPIPE
เกิดขึ้นหากคุณพยายามที่จะเขียนไปยังท่อหลังจากที่ผู้อ่านของท่อปิดท้ายพวกเขา man 7 pipe
ดู
SIGCHLD
เกิดขึ้นเมื่อกระบวนการลูกที่คุณสร้างออกจากหรือถูกระงับ (โดยSIGSTOP
หรือคล้ายกัน)
มีประโยชน์สำหรับการส่งสัญญาณด้วยตนเอง
SIGABRT
มักเกิดจากโปรแกรมที่เรียกใช้abort()
ฟังก์ชันและทำให้การถ่ายโอนข้อมูลหลักโดยค่าเริ่มต้น จัดเรียงของ "ปุ่มตกใจ"
SIGALRM
เกิดจากการalarm()
เรียกของระบบซึ่งจะทำให้เคอร์เนลเพื่อส่งมอบSIGALRM
ให้กับโปรแกรมหลังจากจำนวนวินาทีที่ระบุ ดูและman 2 alarm
man 2 sleep
SIGUSR1
และSIGUSR2
มีการใช้อย่างไรก็ตามโปรแกรมที่ชอบ อาจมีประโยชน์สำหรับการส่งสัญญาณระหว่างกระบวนการ
ส่งโดยผู้ดูแลระบบ
สัญญาณเหล่านี้มักจะถูกส่งจากพร้อมรับคำสั่งผ่านทางkill
คำสั่งหรือfg
หรือในกรณีของbg
SIGCONT
SIGKILL
และSIGSTOP
เป็นสัญญาณที่ไม่ปิดกั้น ครั้งแรกมักจะยุติกระบวนการทันที ขั้นตอนที่สองจะระงับกระบวนการ
SIGCONT
ดำเนินการต่อกระบวนการที่ถูกระงับ
SIGTERM
เป็นรุ่น catchable SIGKILL
ของ