ไม่มีอะไรน่ารำคาญไปกว่าการรันคำสั่งในเทอร์มินัลของคุณและให้มันทำงานเป็นเวลาหลายนาที บางครั้งหลายชั่วโมง และไม่สามารถใช้เทอร์มินัลของคุณได้อีก แน่นอนว่าคุณสามารถใช้แท็บต่างๆ ได้ แต่นั่นเป็นวิธีแก้ปัญหาที่ยุ่งยาก และอาจไม่เหมาะเสมอไปเพราะคุณอาจต้องการดูการอัปเดตในขณะที่คุณกำลังทำงาน เราจะแสดงวิธีการเรียกใช้คำสั่ง bash ในพื้นหลังใน Linux ด้วยวิธีต่างๆ สองสามวิธี
สิ้นสุดคำสั่งด้วย &
หากคุณต้องการพุชคำสั่งไปที่พื้นหลังโดยใช้ &
ในตอนท้ายเป็นวิธีที่ง่ายในการทำเช่นนั้น ด้วยวิธีนี้ คุณสามารถออกคำสั่งในเบื้องหลังและใช้เทอร์มินัลของคุณต่อไปในขณะที่ทำงาน มันมาพร้อมกับการจับแม้ว่า การใช้ &
ไม่ตัดการเชื่อมต่อคำสั่งจากคุณ มันแค่ผลักมันเข้าไปในพื้นหลัง ซึ่งหมายความว่าในขณะที่คุณพยายามใช้เทอร์มินัล สิ่งใดก็ตามที่คำสั่งต้องการพุชไปที่ STDOUT
หรือ STDERR
จะยังคงพิมพ์อยู่ ซึ่งอาจทำให้เสียสมาธิ
COMMAND &
เมื่อปิดเซสชันเทอร์มินัล คำสั่งจะสิ้นสุดลง คุณยังสามารถฆ่าคำสั่งได้โดยการออก jobs
คำสั่ง ค้นหาหมายเลขคำสั่งที่กำลังรัน และฆ่ามันด้วย kill
สั่งการ. ไวยากรณ์นั้นเป็นดังนี้:
kill %1
การใช้ &
เป็นสิ่งที่ดีถ้าคุณต้องการผลักดันบางสิ่งบางอย่างออกไปเล็กน้อย แต่อย่าคาดหวังว่ามันจะเป็นต่อไปตลอดไป
&หลังจากออกคำสั่งแล้วก็ปฏิเสธมัน
เรียกใช้คำสั่งด้วย &
ดันออกไปทางด้านหลังและทำงานต่อไปตราบเท่าที่หน้าต่างเทอร์มินัลเปิดอยู่ อย่างไรก็ตาม หากคุณต้องการให้คำสั่งนี้ทำงานอย่างต่อเนื่อง แม้ว่าเซสชันเทอร์มินัลของคุณจะสิ้นสุด คุณสามารถใช้ disown
คำสั่ง
หากต้องการใช้วิธีนี้ ให้เริ่มต้นด้วยการเพิ่ม &
.
COMMAND &
ตามที่กล่าวไว้ข้างต้น โดยใช้ &
พุชคำสั่งนี้ไปที่พื้นหลังแต่จะไม่แยกคำสั่งออกจากผู้ใช้ของคุณ คุณสามารถตรวจสอบได้โดยพิมพ์ jobs
เข้าไปในเทอร์มินัล มันจะแสดงคำสั่งที่ทำงานอยู่ในพื้นหลังตามที่เราเห็นมาก่อน
เพียงพิมพ์ disown
เข้าไปในเปลือกและมันจะทำอย่างนั้น (และคุณสามารถตรวจสอบอีกครั้งด้วย jobs
คำสั่ง)
ตอนนี้คุณสามารถปิดเทอร์มินัลของคุณและดำเนินการต่อเกี่ยวกับวันของคุณ มันยังคงส่งสิ่งต่าง ๆ ไปยัง STDOUT
หรือ STDERR
แต่เมื่อคุณออกและเปิดเทอร์มินัลของคุณอีกครั้ง คุณจะไม่เห็นอะไรเลย คุณสามารถค้นหาคำสั่งอีกครั้งด้วย top
หรือ ps
คำสั่งและฆ่ามันด้วย kill
สั่งการ.
&หลังคำสั่งด้วย /dev/null
กำลังเพิ่ม &
หลังจากที่คำสั่งจะพุชคำสั่งไปที่พื้นหลัง แต่ด้วยเหตุนี้ คำสั่งพื้นหลังจะยังคงพิมพ์ข้อความลงในเทอร์มินัลในขณะที่คุณใช้งาน หากคุณต้องการป้องกันสิ่งนี้ ให้ลองเปลี่ยนเส้นทางคำสั่งไปที่ /dev/null
.
COMMAND &>/dev/null &
ซึ่งไม่ได้ป้องกันไม่ให้คำสั่งปิดเมื่อปิดเทอร์มินัล อย่างไรก็ตาม ตามที่กล่าวไว้ข้างต้น คุณสามารถใช้ disown
เพื่อยกเลิกคำสั่งที่กำลังทำงานออกจากผู้ใช้ คุณยังสามารถฆ่ามันได้ด้วยวิธีการใดวิธีหนึ่งที่กล่าวถึงข้างต้น หากคุณไม่ต้องการให้มันทำงานอีกต่อไป
Nohup พร้อม &และ /dev/null
ต่างจากคำสั่งก่อนหน้าโดยใช้ nohup
อนุญาตให้คุณเรียกใช้คำสั่งในพื้นหลังและให้มันทำงานต่อไปได้ ยังไง? nohup
ข้ามสัญญาณ HUP (สัญญาณวางสาย) ทำให้สามารถเรียกใช้คำสั่งในพื้นหลังได้แม้ในขณะที่เครื่องปิดอยู่ รวมคำสั่งนี้กับการเปลี่ยนเส้นทางไปที่ “/dev/null” (เพื่อป้องกันไม่ให้ nohup สร้างไฟล์ nohup.out) และทุกอย่างจะไปยังพื้นหลังด้วยคำสั่งเดียว
nohup COMMAND &>/dev/null &
โปรแกรมเทอร์มินัลส่วนใหญ่บน Linux ในปัจจุบันมีคุณสมบัติในตัวเพื่อให้ทำงานในเบื้องหลังได้อย่างง่ายดาย นอกจากนั้น ระบบ init ที่ทันสมัย (เช่น systemd) ยังอนุญาตให้ผู้ใช้เริ่มโปรแกรมต่างๆ เช่น บริการเมื่อเปิดเครื่องหรือเมื่อใดก็ได้
อย่างไรก็ตาม บางโปรแกรมบน Linux ยังขาดความสามารถในการทำงานเป็น daemon หรือรวมเข้ากับระบบ init ที่ทันสมัย นี่เป็นความไม่สะดวกอย่างแท้จริง แต่ก็สามารถเข้าใจได้ เนื่องจากไม่ใช่นักพัฒนาทุกคนที่มีทักษะหรือเวลาในการเพิ่มคุณสมบัติใหม่
โชคดีที่คำสั่งเช่น nohup
หรือ disown
ยังคงเป็นจริงและสามารถปิดช่องว่างในการย้ายโปรแกรมเช่นนี้ไปเป็นเบื้องหลังได้ ไม่ได้สมบูรณ์แบบหรือหรูหรา แต่ทำงานได้เมื่อจำเป็น
หากคุณชอบบทความนี้เกี่ยวกับ Linux อย่าลืมตรวจสอบเนื้อหา Linux อื่นๆ ของเรา เช่น วิธีเชื่อมต่อบัญชี Google ของคุณกับ GNOME Shell, Linux distros ที่ดีที่สุดสำหรับผู้ใช้ windows และคำสั่ง LS ที่คุณต้องรู้