เพื่อที่จะตอบคำถามที่สองครั้งแรกของคุณ: SIGSTOPและSIGKILLไม่สามารถจับโดยการประยุกต์ใช้ แต่ทุกสัญญาณอื่น ๆ SIGSEGVแม้ คุณสมบัตินี้มีประโยชน์สำหรับการดีบักตัวอย่างเช่นด้วยการสนับสนุนSIGSEGVไลบรารี่ที่ถูกต้องคุณสามารถฟังและสร้าง backtrace สแต็กเพื่อแสดงตำแหน่งที่ segfault นั้นเกิดขึ้น
คำอย่างเป็นทางการ (สำหรับ Linux อยู่แล้ว) ในสิ่งที่แต่ละสัญญาณมีให้โดยพิมพ์man 7 signalจากบรรทัดคำสั่ง Linux http://linux.die.net/man/7/signalมีข้อมูลเหมือนกัน แต่ตารางอ่านยาก
อย่างไรก็ตามไม่มีประสบการณ์เกี่ยวกับสัญญาณมันยากที่จะรู้จากคำอธิบายสั้น ๆ ว่าพวกเขาทำอะไรในทางปฏิบัติดังนั้นนี่คือการตีความของฉัน:
ถูกกระตุ้นจากแป้นพิมพ์
SIGINTCTRL+Cที่เกิดขึ้นเมื่อคุณกด
SIGQUITถูกกระตุ้นโดยCTRL+\และทิ้งแกน
SIGTSTPCTRL+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 alarmman 2 sleep
SIGUSR1และSIGUSR2มีการใช้อย่างไรก็ตามโปรแกรมที่ชอบ อาจมีประโยชน์สำหรับการส่งสัญญาณระหว่างกระบวนการ
ส่งโดยผู้ดูแลระบบ
สัญญาณเหล่านี้มักจะถูกส่งจากพร้อมรับคำสั่งผ่านทางkillคำสั่งหรือfgหรือในกรณีของbgSIGCONT
SIGKILLและSIGSTOPเป็นสัญญาณที่ไม่ปิดกั้น ครั้งแรกมักจะยุติกระบวนการทันที ขั้นตอนที่สองจะระงับกระบวนการ
SIGCONT ดำเนินการต่อกระบวนการที่ถูกระงับ
SIGTERMเป็นรุ่น catchable SIGKILLของ