ในระบบ POSIX สัญญาณการยุติมักจะมีลำดับดังต่อไปนี้ (ตาม MAN หลายหน้าและ POSIX Spec):
SIGTERM - ขอให้กระบวนการยุติอย่างสุภาพ มันจะยุติลงอย่างสง่างามล้างทรัพยากรทั้งหมด (ไฟล์ซ็อกเก็ตกระบวนการลูก ฯลฯ ) การลบไฟล์ชั่วคราวและอื่น ๆ
SIGQUIT - คำขอที่มีประสิทธิภาพมากขึ้น มันจะยุติการอัปยศโดยยังคงล้างทรัพยากรที่จำเป็นอย่างยิ่งที่ต้องล้างข้อมูล แต่อาจจะไม่ลบไฟล์ชั่วคราวอาจจะเขียนข้อมูลการดีบักไว้ที่ไหนสักแห่ง ในบางระบบจะมีการเขียนคอร์ดัมพ์ (ไม่ว่าแอพจะจับสัญญาณหรือไม่ก็ตาม)
SIGKILL - คำขอที่ทรงพลังที่สุด กระบวนการนี้ไม่ได้ขอให้ทำอะไรเลย แต่ระบบจะล้างกระบวนการไม่ว่าจะเป็นเช่นนั้นหรือไม่ก็ตาม เป็นไปได้มากว่าจะมีการเขียนการถ่ายโอนข้อมูลหลัก
SIGINT เข้ากับภาพนั้นได้อย่างไร? โดยปกติกระบวนการ CLI จะถูกยุติโดย SIGINT เมื่อผู้ใช้เข้าชม CRTL + C อย่างไรก็ตามกระบวนการพื้นหลังสามารถยุติได้โดย SIGINT โดยใช้ยูทิลิตี้ KILL สิ่งที่ฉันมองไม่เห็นในข้อมูลจำเพาะหรือไฟล์ส่วนหัวคือถ้า SIGINT มีกำลังมากกว่าหรือน้อยกว่า SIGTERM หรือมีความแตกต่างระหว่าง SIGINT และ SIGTERM เลย
อัพเดท:
คำอธิบายที่ดีที่สุดของสัญญาณการเลิกจ้างผมพบว่าจนถึงขณะนี้อยู่ในเอกสาร GNU libc อธิบายได้เป็นอย่างดีว่ามีความแตกต่างระหว่าง SIGTERM และ SIGQUIT
กล่าวเกี่ยวกับ SIGTERM:
เป็นวิธีปกติในการขอให้โปรแกรมยุติการทำงานอย่างสุภาพ
และพูดเกี่ยวกับ SIGQUIT:
[... ] และสร้างคอร์ดัมพ์เมื่อยุติกระบวนการเช่นเดียวกับสัญญาณข้อผิดพลาดของโปรแกรม คุณสามารถคิดว่านี่เป็นเงื่อนไขข้อผิดพลาดของโปรแกรมที่ "ตรวจพบ" โดยผู้ใช้ [... ] การล้างข้อมูลบางประเภทควรละเว้นในการจัดการ SIGQUIT ตัวอย่างเช่นหากโปรแกรมสร้างไฟล์ชั่วคราวโปรแกรมควรจัดการกับคำร้องขอการยกเลิกอื่น ๆ โดยการลบไฟล์ชั่วคราว แต่จะดีกว่าถ้า SIGQUIT ไม่ลบออกเพื่อให้ผู้ใช้สามารถตรวจสอบร่วมกับ core ดัมพ์ได้
และ SIGHUP ก็อธิบายได้ดีพอ SIGHUP ไม่ใช่สัญญาณการยุติ แต่เพียงแค่หมายความว่า "การเชื่อมต่อ" กับผู้ใช้ขาดหายไปดังนั้นแอปจึงไม่สามารถคาดหวังให้ผู้ใช้อ่านเอาต์พุตเพิ่มเติมใด ๆ (เช่นเอาต์พุต stdout / stderr) และไม่มีอินพุตที่คาดหวังจาก ผู้ใช้อีกต่อไป สำหรับแอปส่วนใหญ่นั่นหมายความว่าควรเลิกใช้ ในทางทฤษฎีแอปสามารถตัดสินใจได้ว่าจะเข้าสู่โหมด daemon เมื่อได้รับ SIGHUP และตอนนี้ทำงานเป็นกระบวนการเบื้องหลังโดยเขียนเอาต์พุตไปยังไฟล์บันทึกที่กำหนดค่าไว้ สำหรับ daemons ส่วนใหญ่ที่ทำงานอยู่เบื้องหลังแล้ว SIGHUP มักจะหมายความว่าพวกเขาจะตรวจสอบไฟล์คอนฟิกูเรชันอีกครั้งดังนั้นคุณจึงส่งไปยังกระบวนการเบื้องหลังหลังจากแก้ไขไฟล์กำหนดค่า
อย่างไรก็ตามไม่มีคำอธิบายที่เป็นประโยชน์เกี่ยวกับ SIGINT ในหน้านี้นอกเหนือจากที่ส่งโดย CRTL + C มีเหตุผลใดบ้างที่เราจะจัดการ SIGINT ด้วยวิธีที่แตกต่างจาก SIGTERM? ถ้าเป็นเช่นนั้นสาเหตุใดและการจัดการจะแตกต่างกันอย่างไร