เหตุใดจึงรันคำสั่ง Linux shell ด้วย '&'
ในการรับพรอมต์ของคุณกลับมาทันทีและเรียกใช้กระบวนการในพื้นหลัง
หน้าที่ของพวกเขาคืออะไร?
nohupอนุญาตให้กระบวนการพื้นหลังทำงานต่อไปแม้หลังจากที่ผู้ใช้ล็อกเอาต์ (หรือออกจากเชลล์เริ่มต้น)
> & เปลี่ยนเส้นทางทั้งเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานไปยังไฟล์บันทึก
&รันทุกสิ่งในพื้นหลังโดยให้คุณตอบกลับทันที
คำอธิบาย:
ทุกกระบวนการ Linux เปิดช่อง I / O สามช่องสัญญาณ "stdin", เอาต์พุตมาตรฐาน "stdout" และเอาต์พุตข้อผิดพลาดมาตรฐาน "stderr" พวกเขาสามารถใช้สำหรับไบนารี แต่พวกเขาเป็นข้อความแบบดั้งเดิม เมื่อโปรแกรมส่วนใหญ่เห็น stdin close พวกเขาจะออก (ซึ่งสามารถเปลี่ยนแปลงได้โดยโปรแกรมเมอร์)
เมื่อเชลล์พาเรนต์ออก stdin จะปิดลงบนลูกและ (โดยปกติมัก) ลูกก็จะออกจากเช่นกัน นอกจากนี้เด็ก ๆ ยังได้รับสัญญาณซอฟต์แวร์ SIGHUP ซึ่งระบุว่าผู้ใช้มี "วางสาย" (เดิมคือโมเด็ม) และค่าเริ่มต้นที่นี่ก็คือออกเช่นกัน (หมายเหตุโปรแกรมเมอร์สามารถเปลี่ยนทั้งหมดนี้เมื่อเขียนโปรแกรม)
ดังนั้นสิ่งที่ nohup ทำคือให้กระบวนการเด็กแยกสภาพแวดล้อม I / O โดยแยกสิ่งที่ไม่เกี่ยวข้องกับเปลือกหอยและป้องกันเด็กจากสัญญาณ SIGHUP เมื่อผู้ใช้ยกเลิกการเชื่อมต่อคุณจะเห็นกระบวนการพื้นหลัง nohup เป็นเจ้าของโดย init (กระบวนการ 1) ไม่ใช่เชลล์ของผู้ใช้
อย่างไรก็ตามnohup
ไม่สามารถทำงานได้อย่างสมบูรณ์หากกระบวนการทำงานในเบื้องหน้าดังนั้นจึง&
ใช้เพื่อเรียกใช้โปรแกรมในพื้นหลังซึ่งจะสามารถทำงานได้อย่างมีความสุขเมื่อมีหรือไม่มีผู้ใช้ที่ล็อกอิน