เมื่อคุณปิดเทอร์มินัลเทอร์มินัลจะส่งสัญญาณ SIGHUP ไปยังเชลล์ เชลล์ในทางกลับกันส่งสัญญาณ SIGHUP ไปยังกลุ่มกระบวนการลูกทั้งหมดของมันซึ่งรวมถึงกลุ่มกระบวนการพื้นหลัง;
แต่ละกระบวนการจะตอบสนองต่อสัญญาณอย่างไรกับกระบวนการทั้งหมด: หากกระบวนการไม่ได้กำหนดตัวจัดการสำหรับสัญญาณและบอกเคอร์เนล (ผ่าน syscall บางอย่างเช่นsignal()
หรือsigaction()
) ที่ต้องการจัดการมันเคอร์เนลจะดำเนินการ ตัวจัดการเริ่มต้นสำหรับสัญญาณซึ่งในกรณีของสัญญาณ SIGHUP ประกอบด้วยในการยกเลิกกระบวนการ
อย่างไรก็ตามเมื่อคุณรันคำสั่งด้วยsudo
UID ของsudo
กระบวนการและกระบวนการลูกของมันถูกตั้งค่าเป็น0
(root); โดยทั่วไปเว้นแต่ UID ของกระบวนการส่งสัญญาณคือ0
(root) หรือเหมือนกับกระบวนการเป้าหมายเคอร์เนลจะยกเลิกสัญญาณ (เช่น: กระบวนการไม่สามารถส่งสัญญาณไปยังกระบวนการที่เป็นของผู้ใช้รายอื่นยกเว้นกระบวนการ การส่งสัญญาณเป็นของ root); นั่นเป็นเหตุผลที่เป็นกระบวนการที่ใช้เรียกเช่นทุบตีเช่นวิ่งโดย terminal ไม่สามารถ SIGHUP กระบวนการและในที่สุดปิดสถานีไม่ได้ส่งผลกระทบต่อกระบวนการที่เริ่มต้นด้วยsudo
sudo