ฉันเป็นมือใหม่ใน Ubuntu ฉันได้เรียนรู้คำสั่ง
nohup [command]
- เรียกใช้<command>
สัญญาณภูมิคุ้มกันเพื่อวางสาย
ฉันไม่เข้าใจความหมายของ " ภูมิคุ้มกันต่อสัญญาณการแฮงค์ " สัญญาณชนิดใดที่มันกำลังพูดถึง? และโปรดบอกวิธีใช้คำสั่งนี้พร้อมตัวอย่าง
ฉันเป็นมือใหม่ใน Ubuntu ฉันได้เรียนรู้คำสั่ง
nohup [command]
- เรียกใช้<command>
สัญญาณภูมิคุ้มกันเพื่อวางสาย
ฉันไม่เข้าใจความหมายของ " ภูมิคุ้มกันต่อสัญญาณการแฮงค์ " สัญญาณชนิดใดที่มันกำลังพูดถึง? และโปรดบอกวิธีใช้คำสั่งนี้พร้อมตัวอย่าง
คำตอบ:
ให้เราพิจารณาว่าคุณได้เปิด gedit
ตัวแก้ไขข้อความจากเทอร์มินัลและทำงานกับมันแล้ว หากคุณปิดเครื่องก่อนที่จะปิดgedit
เครื่อง Gedit ก็จะถูกปิดทันทีที่ปิดเครื่อง แล้วเกิดอะไรขึ้นที่นี่? การgedit
เรียกใช้เป็นกระบวนการลูกภายใต้เทอร์มินัล เมื่อคุณปิดเทอร์มินัลสัญญาณวางสาย ( SIGHUP
) จะถูกส่งไปยังกระบวนการที่ฆ่ากระบวนการลูก
ในทางตรงกันข้ามถ้าคุณต้องการให้กระบวนการลูกของคุณ (ที่นี่gedit
) ทำงานต่อไปแม้หลังจากปิดเทอร์มินัลหลักแล้วคุณจะต้องการให้กระบวนการของคุณมีภูมิคุ้มกันต่อสัญญาณการแฮงเอาท์ ดังนั้นการปิดเทอร์มินัลจะไม่ปิดกระบวนการลูก nohup
ทำงานนี้อย่างแน่นอน
nohup
ไม่ตัดการเชื่อมต่อคำสั่งจากเทอร์มินัลทำให้สคริปต์ของคุณเพิกเฉยต่อ SIGHUP และเปลี่ยนเส้นทาง stdout / stderr ไปยังไฟล์ nohup.out เพื่อให้คำสั่งสามารถทำงานต่อในพื้นหลังหลังจากที่คุณออกจากระบบ หากคุณปิดเชลล์ / เทอร์มินัลหรือออกจากระบบคำสั่งของคุณจะไม่เป็นลูกของเชลล์นั้นอีกต่อไป มันเป็นกระบวนการเริ่มต้น หากคุณค้นหาpstree
คุณจะเห็นว่าตอนนี้มันเป็นของกระบวนการ 1 (init) สิ่งนั้นไม่สามารถนำกลับมาที่เบื้องหน้าได้เพราะพื้นหน้าไม่มีอยู่อีกต่อไป
นอกจากสิ่งที่ @sourvac เขียนแล้วนี่เป็นมรดกจาก Back In The Day เมื่อผู้ใช้ลงชื่อเข้าใช้ผ่านเทอร์มินัลโง่อย่างเดียวข้อความผ่านโมเด็ม (เดิมอะนาล็อก 110 baud ดั้งเดิม): "วางสาย" เป็นตัวอักษร "วางสายโทรศัพท์ "
หมายเลขผลิตภัณฑ์ที่มีภูมิคุ้มกันต่อสัญญาณ hangupจะเก็บไว้ในการทำงานแม้หลังจากที่คุณออกจากระบบและวางสายโทรศัพท์ สิ่งนี้มีประโยชน์มากสำหรับคอมพิวเตอร์ที่ทำงานช้าเมื่องานวิ่งมาหลายชั่วโมงต่อชั่วโมงและคุณไม่สามารถอยู่ในระบบได้ (มีคนอื่นต้องการใช้เครื่องเทอร์มินัลคุณจำเป็นต้องใช้โทรศัพท์แบบคงที่ในสายอาจ "bzzt" การเชื่อมต่อ ฯลฯ )
disown
nohup
แบ็คกราวน์คำสั่งด้วยcommand &
หรือCtrl-Z
จากนั้นใช้disown
เพื่อแยกมันออกจากเชลล์