ก่อนอื่นทุกครั้งที่คุณรันคำสั่งเชลล์คุณจะแยกกระบวนการใหม่โดยไม่คำนึงว่าคุณจะรันด้วย&
หรือไม่ &
หมายความว่าคุณกำลังรันอยู่ในพื้นหลังเท่านั้น
โปรดทราบว่านี่ไม่ถูกต้องมาก คำสั่งบางคำสั่งเช่นเดียวกับcd
ฟังก์ชันของเชลล์และโดยปกติจะไม่แยกกระบวนการใหม่ type cmd
มักจะบอกคุณว่าcmd
เป็นคำสั่งภายนอกหรือฟังก์ชั่นเปลือก type type
บอกคุณว่าtype
ตัวเองเป็นฟังก์ชั่นเปลือก
nohup
เป็นสิ่งที่แตกต่าง SIGHUP
มันบอกว่ากระบวนการใหม่ที่จะไม่สนใจ เป็นสัญญาณที่ส่งโดยเคอร์เนลเมื่อปิด parent parent
ในการตอบคำถามของคุณให้ทำดังต่อไปนี้:
- เรียกใช้
emacs &
(โดยค่าเริ่มต้นควรจะทำงานในหน้าต่าง X ที่แยกต่างหาก)
exit
บนเปลือกแม่ทำงาน
คุณจะสังเกตเห็นว่าemacs
หน้าต่างถูกฆ่าแม้ว่าจะทำงานในพื้นหลัง นี่คือพฤติกรรมเริ่มต้นและnohup
มีการใช้อย่างแม่นยำเพื่อแก้ไข
ใช้งานในพื้นหลัง (ด้วย&
หรือbg
ฉันเดิมพันเชลล์อื่น ๆ ที่มีไวยากรณ์อื่น ๆ เช่นกัน) เป็นคุณสมบัติเชลล์ที่เกิดจากความสามารถของระบบที่ทันสมัยเพื่อมัลติทาสก์ แทนการฟอร์กอินสแตนซ์เปลือกใหม่สำหรับโปรแกรมที่คุณต้องการที่จะเปิดตัวทุกเปลือกหอยที่ทันสมัย ( bash
, zsh
, ksh
, ... ) จะมีความสามารถในการจัดการรายการของโปรแกรม (หรืองาน ) มีเพียงหนึ่งครั้งเท่านั้นที่สามารถอยู่เบื้องหน้าซึ่งหมายความว่าจะได้รับโฟกัสของเชลล์ ฉันต้องการใครสักคนที่สามารถขยายเพิ่มเติมเกี่ยวกับความแตกต่างระหว่างขั้นตอนการทำงานในเบื้องหน้าและเป็นหนึ่งในพื้นหลัง (หลักที่ถูก acess ไปstdin
/ stdout
)
ในกรณีใด ๆ SIGHUP
นี้ไม่ได้ส่งผลกระทบต่อวิธีการตอบสนองกระบวนการเด็ก nohup
ทำ.
nohup
ทำ ส่วนไหนที่คุณสับสน