ฉันควรใช้“ nohup” เมื่อใดและควรใช้“ &” เมื่อใด


16

ฉันไม่เคยรู้ว่าเมื่อใดเวลาที่ดีที่สุดในการใช้ nohup และ & ในตอนท้ายของคำสั่ง

คำตอบ:


20

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


13

โดยทั่วไปฉันจะใช้&เมื่อฉันต้องการเรียกใช้คำสั่งเบื้องหลังซึ่งจะใช้เวลาไม่นานในการรันหรือเป็นคำสั่งที่ฉันไม่สนใจจริงๆหากโปรแกรมนั้นถูกยกเลิกหากฉันออกจากระบบโดยไม่คาดคิด

xcalc &
rdesktop 1.2.3.4 & 
./this_only_takes_a_few_seconds_but_i_want_my_shell_back.py &

เมื่อทำงานกับ VPN หรือการเชื่อมต่อระยะไกลซึ่งหลบฉันมักจะใช้nohupสำหรับการทำงานใด ๆ ที่จะใช้เวลาสักครู่ในการทำงาน เมื่อรันการนำเข้าข้อมูลขนาดใหญ่บนรีโมตโฮสต์ตัวอย่างเช่นคุณอาจต้องการใช้nohupเพื่อให้แน่ใจว่าการตัดการเชื่อมต่อจะไม่ทำให้คุณเริ่มต้นใหม่เมื่อคุณเชื่อมต่อใหม่

nohup ./do_data_load.py mydatafile.txt &

นอกจากนี้ยังใช้เมื่อผู้พัฒนาไม่ได้ติดตั้งบริการอย่างถูกต้องดังนั้นคุณต้องใช้nohupเพื่อให้แน่ใจว่าจะไม่ถูกฆ่าเมื่อคุณออกจากระบบ

nohup sillyd &

หากคุณลืมที่จะใช้nohupเมื่อเรียกใช้บางอย่างเช่นสองตัวอย่างล่าสุดคุณสามารถใช้ bash หรือ zsh builtin disownเพื่อให้ได้เอฟเฟกต์เดียวกัน

$ sillyd &
[1] 12345            # Whoops!
$ disown %1

มันค่อนข้างยากที่จะใช้nohupหาก&คุณไม่สามารถกลับไปที่เซสชัน nohup'd ได้อีกหากคุณออกจากระบบ สิ่งนี้ช่วยลดความได้เปรียบสำหรับคำสั่งแบบโต้ตอบ screenในกรณีที่คุณมีคำสั่งแบบโต้ตอบคุณต้องการที่จะยังคงอยู่ในช่วงการประชุมหรือหลีกเลี่ยงความซับซ้อนเชื่อมต่อคุณสามารถใช้ อาวุธของกองกำลังติดอาวุธอย่างเต็มที่และการดำเนินงานscreenเซสชั่นอยู่นอกเหนือขอบเขตของบทความนี้ดังนั้นคุณจึงควรตรวจสอบในรายละเอียดเพิ่มเติม


ฉันพบว่า tmux ง่ายต่อการกำหนดค่าและใช้งานมากกว่าหน้าจอ นอกจากนี้ BSD ได้รับอนุญาต
Kristaps

1
คุณยังสามารถใช้byobuซึ่งเพิ่มคุณสมบัติที่ดีบางอย่างให้กับหน้าจอ มันมีอยู่ในส่วนใหญ่ที่เหมาะสมและใน EPEL repos สำหรับ Red Hat
James

0

nohup: ออกจากระบบผู้ใช้ปัจจุบันกระบวนการจะไม่หยุด

&: ด้วยสัญลักษณ์นี้จะไม่มีเอาต์พุตในเทอร์มินัลปัจจุบันซึ่งเป็นกระบวนการที่ทำงานเบื้องหลัง


4
เรายังมีผลลัพธ์เนื่องจาก & ไม่ได้ลบเอาต์พุตมาตรฐานและสตรีมข้อผิดพลาด คุณต้องใช้การเปลี่ยนเส้นทางสตรีมเช่นนี้ (ใน bash) คำสั่ง> / dev / null 2> 1
Kristaps
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.