ใน Bash disown
คำสั่งที่ออกด้วยตัวเองจะลบกระบวนการที่ผ่านพื้นหลัง (ผ่านbg
หรือ&
) ออกจากตารางงานที่ใช้งานอยู่และทำเครื่องหมายว่าไม่ได้รับ SIGHUP เมื่อออกจากระบบ
disown 1 3
นอกจากนี้คุณยังสามารถส่งผ่านหนึ่งหรือมากกว่าหนึ่งงานที่จะปฏิเสธเช่น การdisown -h
ตั้งค่าสถานะมีประโยชน์ถ้าคุณต้องการเก็บงานไว้ในตาราง แต่ก็ยังไม่ได้ SIGHUP เมื่อออกจากระบบ
คุณสามารถดูตารางงานได้โดยออกjobs
คำสั่ง หลังจากพื้นหลังสำเร็จจะปรากฏ[1]+ command &
ขึ้น หลังจากปฏิเสธงานแล้วไม่ควรแสดงในตารางงานอีกต่อไปและจะไม่ถูกฆ่าเมื่อออกจากระบบอีกต่อไป คุณยังสามารถดูขั้นตอนการผ่านทางps ux
, top
และสาธารณูปโภคกระบวนการอื่น ๆ ดู
หลังจากงานถูกปฏิเสธคุณสามารถรอให้งานยุติอย่างเป็นธรรมชาติหรือส่งสัญญาณผ่านทางkill
PID เพื่อหยุด
เนื่องจาก Bash เพิ่งลบงานออกจากรายการงานที่กำลังดำเนินการเพื่อยกเลิกและไฟล์จัดการกับ stdout ของเทอร์มินัลของคุณและ stderr ยังคงเปิดอยู่คุณจะยังคงได้รับเอาต์พุตจากงานต่อไปจนกว่าอุปกรณ์เทอร์มินัลของคุณจะปิด .
ตัวอย่าง:
# we start a command in the background
$ cat /dev/urandom > test &
[1] 18533
# we see our command is still running
$ jobs
[1]+ Running cat /dev/urandom > test &
# we disown the backgrounded job
$ disown 1
# notice it is no longer in the job table
$ jobs
ฉันมักจะใช้เฉพาะdisown
เมื่อฉันเรียกใช้คำสั่งที่อาจใช้เวลานานเช่นrsync
หรือcp
หลังจากนั้นตัดสินใจว่าฉันจะต้องออกจากระบบโดยไม่ต้องยกเลิกมัน หากคุณรู้ว่าคุณกำลังจะเรียกใช้คำสั่งและออกจากระบบคุณสามารถจับเอาท์พุทโดยการไพพ์หรือtee
ไอเท็มไปยังไฟล์รันด้วยnohup
หรือรันมันในscreen
(ซึ่งช่วยให้คุณสามารถเป็นเจ้าของคำสั่ง / ยุติในภายหลัง )
ตัวอย่าง:
# capture stdout and stderr to separate logs
cat /dev/urandom >stdout.log 2>stderr.log
# capture stdout and stderr to the same log, and display to stdout as well
cat /dev/urandom 2>&1 | tee output.log
# run a command under nohup (doesn't require a disown or job control support)
nohup cat /dev/urandom </dev/null