เป็นที่นักเทียบท่าหยุดพยายามที่จะหยุดกระบวนการทำงานภายในภาชนะในทางที่ถูกต้องในขณะที่นักฆ่านักฆ่าจะส่งสัญญาณฆ่า?
โดยพื้นฐานแล้วใช่ความแตกต่างนั้นบอบบาง แต่ถูกร่างไว้ในการอ้างอิงบรรทัดคำสั่ง :
- นักเทียบท่าหยุด : หยุดคอนเทนเนอร์ที่ใช้งานอยู่ ( ส่ง SIGTERM แล้ว SIGKILL หลังจากระยะเวลาผ่อนผัน ) [... ] กระบวนการหลักภายในคอนเทนเนอร์จะได้รับ SIGTERM และหลังจากช่วงเวลาผ่อนผัน SIGKILL [เน้นเหมือง]
- นักฆ่านักฆ่า : ฆ่าภาชนะที่ใช้งานอยู่ ( ส่ง SIGKILL หรือสัญญาณที่ระบุ ) [... ] กระบวนการหลักภายในภาชนะจะถูกส่ง SIGKILL หรือสัญญาณใด ๆ ที่ระบุด้วยตัวเลือก - สัญญาณ [เน้นเหมือง]
ดังนั้นstop
พยายามที่จะทริกเกอร์การปิดอย่างนุ่มนวลโดยการส่งสัญญาณ POSIX มาตรฐานSIGTERM
ในขณะที่kill
เพียงแค่ฆ่ากระบวนการโดยค่าเริ่มต้น (แต่ยังช่วยให้การส่งสัญญาณอื่น ๆ ):
สัญญาณ SIGTERM ถูกส่งไปยังกระบวนการเพื่อร้องขอการยกเลิก ซึ่งแตกต่างจากสัญญาณ SIGKILL ก็สามารถจับและตีความหรือละเว้นโดยกระบวนการ สิ่งนี้อนุญาตให้กระบวนการดำเนินการเลิกจ้างอย่างดีปล่อยทรัพยากรและสถานะการบันทึกตามความเหมาะสม ควรสังเกตว่า SIGINT นั้นเกือบจะเหมือนกับ SIGTERM
ในขณะที่ไม่ได้บังคับใช้ในกระบวนการโดยทั่วไปคาดว่าจะจัดการSIGTERM
อย่างสง่างามและทำสิ่งที่ถูกต้องขึ้นอยู่กับความรับผิดชอบของพวกเขา - นี้สามารถล้มเหลวได้อย่างง่ายดายเนื่องจากความพยายามปิดที่สง่างามใช้เวลานานกว่าระยะเวลาผ่อนผัน ยิ่ง (เช่นสำหรับฐานข้อมูล); ดูตัวอย่างSIGTERM vs. Major Hayden ของSIGKILLสำหรับคำอธิบายโดยละเอียดเพิ่มเติม:
แอปพลิเคชันสามารถกำหนดสิ่งที่ต้องการทำเมื่อได้รับ SIGTERM ในขณะที่แอปพลิเคชันส่วนใหญ่จะล้างทรัพยากรและหยุดบางส่วนอาจไม่ แอปพลิเคชันอาจถูกกำหนดค่าให้ทำสิ่งที่แตกต่างอย่างสิ้นเชิงเมื่อได้รับ SIGTERM นอกจากนี้หากแอปพลิเคชันอยู่ในสถานะไม่ดีเช่นการรอดิสก์ I / O มันอาจไม่สามารถทำงานกับสัญญาณที่ถูกส่ง