ความแตกต่างระหว่างสัญญาณการฆ่าที่รุนแรงน้อยกว่า --HUP (1) -INT (2) และ -TERM (15)


32

นอกเหนือจากความรุนแรงที่สุดkill -9(SIGKILL) ฉันไม่เข้าใจความแตกต่างระหว่างสัญญาณทั่วไปอื่น ๆ อีก 3 ตัว ( ที่นี่ ) -HUP(1), 1 -INT(2) และ-TERM(15)

ในสถานการณ์ใดที่หนึ่งจะทำงานและอื่น ๆ ไม่ได้?

โดยทั่วไปแล้ว-9( -KILL) จะล้มเหลวเมื่อใด

สำหรับผมแล้วพวกเขาดูเหมือนจะขอให้กระบวนการที่จะยุติได้อย่างสง่างาม , โดยไม่ต้องบันทึก -HUP < -TERM < -INT < -KILLการจัดอันดับความรุนแรงที่ฉันจะใส่


HUPไม่ได้แปลว่าโปรแกรมจะออกจากโปรแกรม บางโปรแกรมใช้SIGHUPเพื่อโหลดไฟล์กำหนดค่าใหม่ SIGKILLล้มเหลวหรือค่อนข้างถูกเลื่อนออกไปเมื่อกระบวนการอยู่ในโหมดสลีป
muru

คำตอบ:


52

SIGKILL ไม่เคยล้มเหลวในการฆ่ากระบวนการทำงานนั่นคือประเด็น สัญญาณอื่น ๆ ที่มีอยู่เพื่อให้แอปพลิเคชันมีโอกาสตอบสนอง

พฤติกรรมเริ่มต้นของ SIGINT, SIGTERM, SIGQUIT และ SIGHUP คือการฆ่าโปรแกรม อย่างไรก็ตามแอปพลิเคชันได้รับอนุญาตให้ติดตั้งตัวจัดการสำหรับสัญญาณเหล่านี้ ดังนั้นพฤติกรรมที่แท้จริงของแอพพลิเคชั่นเมื่อพวกเขาได้รับสัญญาณเหล่านี้เป็นเรื่องของการประชุม (ซึ่งแต่ละแอพพลิเคชั่นอาจจะหรือไม่ปฏิบัติตาม) ไม่ใช่การออกแบบระบบ

SIGINT เป็น“ จุดอ่อนที่สุด” ของล็อต ความหมายดั้งเดิมของมันคือ“ หยุดสิ่งที่คุณทำอยู่ตอนนี้และรอการป้อนข้อมูลจากผู้ใช้เพิ่มเติม” มันเป็นสัญญาณที่สร้างขึ้นโดยCtrl+ Cในเทอร์มินัล โดยทั่วไปโปรแกรมที่ไม่ต้องมีการโต้ตอบจะถือว่าเป็น SIGTERM

SIGTERM เป็นสัญญาณฆ่า "ปกติ" มันบอกแอปพลิเคชันให้ออกอย่างหมดจด แอปพลิเคชันอาจใช้เวลาในการบันทึกสถานะของมันเพื่อปล่อยทรัพยากรเช่นไฟล์ชั่วคราวที่อาจจะอยู่ข้างหลังเป็นต้นแอปพลิเคชันที่ไม่ต้องการถูกขัดจังหวะระหว่างแอปพลิเคชันที่สำคัญอาจเพิกเฉย SIGTERM ชั่วครู่หนึ่ง

SIGHUP นั้นคล้ายกับ SIGTERM ในแง่ของความรุนแรง แต่มันมีบทบาทเฉพาะเนื่องจากมันถูกส่งไปยังแอปพลิเคชันที่ทำงานโดยอัตโนมัติในเทอร์มินัลเมื่อผู้ใช้ยกเลิกการเชื่อมต่อจากเทอร์มินัลนั้น (etymologically วางสาย) SIGHUP มักไม่สมัครใจซึ่งแตกต่างจาก SIGTERM ที่ต้องส่งอย่างชัดเจนดังนั้นแอปพลิเคชันควรพยายามบันทึกสถานะของพวกเขาใน SIGHUP SIGHUP ยังมีความหมายดั้งเดิมที่แตกต่างอย่างสิ้นเชิงสำหรับแอปพลิเคชันที่ไม่ต้องใช้กับผู้ใช้ ( daemons ), ซึ่งจะทำการรีโหลดไฟล์การตั้งค่าของพวกเขา

SIGQUIT เป็นสัญญาณที่น่าสะพรึงกลัวที่สุด มันตั้งใจที่จะใช้เมื่อแอปพลิเคชันทำงานผิดปกติและจำเป็นต้องถูกฆ่าในตอนนี้และโดยปกติแล้วจะทิ้งไฟล์core dump (ระบบทันสมัยที่ผู้ใช้ส่วนใหญ่ไม่ทราบว่าไฟล์หลักมีแนวโน้มที่จะไม่สร้างมันตามค่าเริ่มต้น) . แอปพลิเคชันสามารถตั้งค่าตัวจัดการ แต่ควรทำน้อยมาก (โดยเฉพาะอย่างยิ่งไม่บันทึกสถานะใด ๆ ) เพราะจุดประสงค์ของ SIGQUIT จะต้องใช้เมื่อมีบางสิ่งผิดปกติอย่างร้ายแรง


คุณสามารถอธิบายเพิ่มเติมเกี่ยวกับ "บันทึกสถานะของพวกเขา" เพิ่มเติมหรือไม่ หากฉันอยู่ในโปรแกรมแก้ไขข้อความและฉันฆ่าฉันคิดว่าเนื้อหาไม่ได้รับการบันทึก
Kenny

2
@Kenny ผู้แก้ไขส่วนใหญ่จะไม่บันทึกไฟล์เพราะคุณอาจทำการแก้ไขชั่วคราวที่คุณไม่ต้องการบันทึก เครื่องมือแก้ไขขั้นสูง (เช่น vi, emacs) มีไฟล์บันทึกอัตโนมัติที่บันทึกข้อมูลเป็นครั้งคราว ใน SIGHUP พวกเขามักจะทำให้แน่ใจว่าไฟล์บันทึกอัตโนมัติเป็นข้อมูลล่าสุด
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.