ฟังก์ชั่นของคำสั่ง nohup คืออะไร?


18

ฉันเป็นมือใหม่ใน Ubuntu ฉันได้เรียนรู้คำสั่ง

nohup [command]- เรียกใช้<command>สัญญาณภูมิคุ้มกันเพื่อวางสาย

ฉันไม่เข้าใจความหมายของ " ภูมิคุ้มกันต่อสัญญาณการแฮงค์ " สัญญาณชนิดใดที่มันกำลังพูดถึง? และโปรดบอกวิธีใช้คำสั่งนี้พร้อมตัวอย่าง


หากมีอยู่ในเปลือกของคุณเป็นทางเลือกที่ดีกว่าที่จะdisown nohupแบ็คกราวน์คำสั่งด้วยcommand &หรือCtrl-Zจากนั้นใช้disownเพื่อแยกมันออกจากเชลล์
John Kugelman สนับสนุน Monica

@JohnKugelman ที่ไม่เพียงพอคุณสามารถโอนอินพุตเอาต์พุตและสตรีมข้อผิดพลาดได้เช่นกัน เหตุใดจึงไม่ใช้ 'nohup' ซึ่งทำสิ่งนี้ให้คุณโดยอัตโนมัติ
miracle173

คำตอบ:


34

ให้เราพิจารณาว่าคุณได้เปิด geditตัวแก้ไขข้อความจากเทอร์มินัลและทำงานกับมันแล้ว หากคุณปิดเครื่องก่อนที่จะปิดgeditเครื่อง Gedit ก็จะถูกปิดทันทีที่ปิดเครื่อง แล้วเกิดอะไรขึ้นที่นี่? การgeditเรียกใช้เป็นกระบวนการลูกภายใต้เทอร์มินัล เมื่อคุณปิดเทอร์มินัลสัญญาณวางสาย ( SIGHUP) จะถูกส่งไปยังกระบวนการที่ฆ่ากระบวนการลูก

ในทางตรงกันข้ามถ้าคุณต้องการให้กระบวนการลูกของคุณ (ที่นี่gedit) ทำงานต่อไปแม้หลังจากปิดเทอร์มินัลหลักแล้วคุณจะต้องการให้กระบวนการของคุณมีภูมิคุ้มกันต่อสัญญาณการแฮงเอาท์ ดังนั้นการปิดเทอร์มินัลจะไม่ปิดกระบวนการลูก nohupทำงานนี้อย่างแน่นอน

nohupไม่ตัดการเชื่อมต่อคำสั่งจากเทอร์มินัลทำให้สคริปต์ของคุณเพิกเฉยต่อ SIGHUP และเปลี่ยนเส้นทาง stdout / stderr ไปยังไฟล์ nohup.out เพื่อให้คำสั่งสามารถทำงานต่อในพื้นหลังหลังจากที่คุณออกจากระบบ หากคุณปิดเชลล์ / เทอร์มินัลหรือออกจากระบบคำสั่งของคุณจะไม่เป็นลูกของเชลล์นั้นอีกต่อไป มันเป็นกระบวนการเริ่มต้น หากคุณค้นหาpstreeคุณจะเห็นว่าตอนนี้มันเป็นของกระบวนการ 1 (init) สิ่งนั้นไม่สามารถนำกลับมาที่เบื้องหน้าได้เพราะพื้นหน้าไม่มีอยู่อีกต่อไป


16

นอกจากสิ่งที่ @sourvac เขียนแล้วนี่เป็นมรดกจาก Back In The Day เมื่อผู้ใช้ลงชื่อเข้าใช้ผ่านเทอร์มินัลโง่อย่างเดียวข้อความผ่านโมเด็ม (เดิมอะนาล็อก 110 baud ดั้งเดิม): "วางสาย" เป็นตัวอักษร "วางสายโทรศัพท์ "

หมายเลขผลิตภัณฑ์ที่มีภูมิคุ้มกันต่อสัญญาณ hangupจะเก็บไว้ในการทำงานแม้หลังจากที่คุณออกจากระบบและวางสายโทรศัพท์ สิ่งนี้มีประโยชน์มากสำหรับคอมพิวเตอร์ที่ทำงานช้าเมื่องานวิ่งมาหลายชั่วโมงต่อชั่วโมงและคุณไม่สามารถอยู่ในระบบได้ (มีคนอื่นต้องการใช้เครื่องเทอร์มินัลคุณจำเป็นต้องใช้โทรศัพท์แบบคงที่ในสายอาจ "bzzt" การเชื่อมต่อ ฯลฯ )


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

@ เรย์ทำงานเกี่ยวกับพวกเขาผ่านทาง "ที่" หรือเป็นงาน cron?
RonJohn

@ RonJohn Sure หรือผ่านเครื่องมือกริด ฉันไม่ได้ตั้งใจจะแนะนำ nohup เป็นเพียงตัวเลือกเดียว แต่มันก็ยังคงใช้เพื่อจุดประสงค์นี้ในวันนี้
Ray

1
บางทีคำพูดในอดีตของคุณถูกต้อง แต่ข้อสรุปของคุณเกี่ยวกับความสำคัญในปัจจุบันนั้นผิด มันไม่ได้มีประโยชน์ในคอมพิวเตอร์ที่ช้า แต่มันมีประโยชน์สำหรับการทำงานที่ยาวนาน นี่เป็นสองสิ่งที่แตกต่างกัน คุณใช้ 'nohup' เพื่อปกป้องงานของคุณจากการขาดการเชื่อมต่อที่ตั้งใจหรือไม่ตั้งใจของเครื่องของคุณ ทุกวันนี้คุณไม่มีความสุขถ้างานล้มเหลวเนื่องจากข้อผิดพลาดของเครือข่ายตัดการเชื่อมต่อเทอร์มินัลและงานของคุณถูกยกเลิก
miracle173

@Ray Cron jobs ไม่เหมาะสมอย่างยิ่งที่จะบรรลุเป้าหมายนี้ Cronjobs สำหรับงานที่ต้องทำตามกำหนดเวลาคุณต้องกำหนดสภาพแวดล้อมใน cronjob และพิจารณาเรื่องอื่น ๆ มากมาย บางที 'at' นั้นง่ายกว่านิดหน่อยที่จะจัดการ แต่ก็ซับซ้อนกว่า nohup
miracle173
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.