ฉันอ่านคำตอบจากผู้ใช้ที่อ้างว่าใช้งานได้
foo 2>&1 >& output.log &
จะส่งผลfoo
ให้ทำงานต่อไปแม้ในขณะที่ออกจากระบบ ตามที่ผู้ใช้คนนี้ทำงานได้ดีกว่าการเชื่อมต่อ SSH
ฉันไม่เชื่อจริง ๆ เพราะฉันรู้สึกว่าในกรณีที่ตัดการเชื่อมต่อจาก SSH หรือยกเลิก TTY เชลล์และกระบวนการของมันจะได้รับ SIGHUP ทำให้พวกเขายุติ นี้ภายใต้สมมติฐานของฉันเป็นเหตุผล แต่เพียงผู้เดียวสำหรับการใช้nohup
ในกรณีดังกล่าวหรือtmux
, screen
et al,
ฉันดูคู่มือของ glibc แล้ว :
สัญญาณนี้ยังใช้เพื่อรายงานการยุติกระบวนการควบคุมในเทอร์มินัลไปยังงานที่เกี่ยวข้องกับเซสชันนั้น การยุตินี้จะยกเลิกการเชื่อมต่อกระบวนการทั้งหมดในเซสชันจากเทอร์มินัลการควบคุมอย่างมีประสิทธิภาพ
ดูเหมือนว่าจะยืนยันความคิดของฉัน แต่เมื่อมองไปไกลมันก็บอกว่า :
หากกระบวนการเป็นผู้นำเซสชันที่มีเทอร์มินัลการควบคุมสัญญาณ SIGHUP จะถูกส่งไปยังแต่ละกระบวนการในงานเบื้องหน้าและเทอร์มินัลการควบคุมจะถูกยกเลิกการเชื่อมโยงจากเซสชันนั้น
ดังนั้นนี่หมายความว่างานที่อยู่ในพื้นหลังจะไม่ได้รับ SIGHUP หรือไม่?
สำหรับความสับสนที่เพิ่มขึ้นของฉันฉันใช้เซสชัน Zsh แบบอินเทอร์แอคทีฟวิ่งyes >& /dev/null &
และพิมพ์exit
เมื่อ Zsh เตือนฉันว่าฉันทำงานอยู่และหลังจากพิมพ์exit
ครั้งที่สองบอกฉันว่ามีงานหนึ่งงาน การทำเช่นเดียวกันนี้ใน Bash ทำให้งานหยุดทำงาน ...
logout
และyes
ยังคงทำงานอยู่