Android

วิธีการเรียกใช้คำสั่ง linux ในพื้นหลัง

What the Waters Left Behind Trailer 2 (2018) Los Olvidados

What the Waters Left Behind Trailer 2 (2018) Los Olvidados

สารบัญ:

Anonim

โดยทั่วไปเมื่อคุณรันคำสั่งในเทอร์มินัลคุณต้องรอจนกว่าคำสั่งจะเสร็จสิ้นก่อนจึงจะสามารถป้อนคำสั่งอื่นได้ สิ่งนี้เรียกว่าการรันคำสั่งในกระบวนการเบื้องหน้าหรือเบื้องหน้า เมื่อกระบวนการทำงานในเบื้องหน้ากระบวนการจะใช้เชลล์ของคุณและคุณสามารถโต้ตอบกับมันโดยใช้อุปกรณ์อินพุต

เกิดอะไรขึ้นถ้าคำสั่งใช้เวลานานกว่าจะเสร็จสิ้นและคุณต้องการเรียกใช้คำสั่งอื่น ๆ ในเวลาเดียวกัน? คุณมีหลายทางเลือกในการกำจัดของคุณ ตัวเลือกที่ชัดเจนและตรงไปตรงมาที่สุดคือการเริ่มเชลล์เซสชันใหม่และรันคำสั่งในนั้น ตัวเลือกอื่นคือการเรียกใช้คำสั่งในพื้นหลัง

กระบวนการพื้นหลังเป็นกระบวนการ / คำสั่งที่เริ่มต้นจากเทอร์มินัลและทำงานในพื้นหลังโดยไม่มีการโต้ตอบจากผู้ใช้

เราจะพูดถึงกระบวนการพื้นหลังคือ Linux เราจะแสดงวิธีการเริ่มต้นคำสั่งในพื้นหลังและวิธีการทำให้กระบวนการทำงานหลังจากเชลล์เซสชั่นถูกปิด

เรียกใช้คำสั่ง Linux ในพื้นหลัง

หากต้องการเรียกใช้คำสั่งในพื้นหลังให้เพิ่มสัญลักษณ์เครื่องหมาย & () ที่ท้ายคำสั่ง:

command &

ID งานเชลล์ (ล้อมรอบด้วยวงเล็บ) และ ID กระบวนการจะถูกพิมพ์บนเทอร์มินัล:

25177

คุณสามารถมีหลายกระบวนการทำงานในพื้นหลังในเวลาเดียวกัน

กระบวนการพื้นหลังจะยังคงเขียนข้อความไปยังเทอร์มินัลที่คุณเรียกใช้คำสั่ง ในการระงับข้อความ stdout และ stderr ใช้ไวยากรณ์ต่อไปนี้:

command > /dev/null 2>&1 &

>/dev/null 2>&1 หมายถึงเปลี่ยนเส้นทาง stdout เป็น /dev/null และ stderr เป็น stdout

ใช้ยูทิลิตี jobs เพื่อแสดงสถานะของงานที่หยุดและงานเบื้องหลังทั้งหมดในเซสชันเชลล์ปัจจุบัน:

jobs -l

เอาต์พุตประกอบด้วยหมายเลขงาน, ID กระบวนการ, สถานะงานและคำสั่งที่เริ่มงาน:

+ 25177 Running ping google.com &

หากต้องการนำกระบวนการส่วนหลังมาที่พื้นหน้าให้ใช้คำสั่ง fg :

fg

fg %1

หากต้องการยุติกระบวนการส่วนหลังให้ใช้คำสั่ง kill แล้วตามด้วย ID กระบวนการ:

kill -9 25177

ย้ายกระบวนการเบื้องหน้าไปยังพื้นหลัง

เมื่อต้องการย้ายกระบวนการทำงานเบื้องหน้าในเบื้องหลัง:

  1. หยุดกระบวนการโดยพิมพ์ Ctrl+Z ย้ายกระบวนการหยุดไปยังพื้นหลังโดยพิมพ์ bg

ทำให้กระบวนการพื้นหลังทำงานต่อไปหลังจากที่ Shell ออกแล้ว

หากการเชื่อมต่อของคุณลดลงหรือคุณออกจากเซสชันเชลล์กระบวนการพื้นหลังจะถูกยกเลิก มีหลายวิธีที่จะทำให้กระบวนการทำงานต่อไปหลังจากเซสชันเชลล์เชิงโต้ตอบสิ้นสุดลง

วิธีหนึ่งคือการลบงานออกจากการควบคุมงานของเชลล์โดยใช้ disown shell builtin:

disown

disown %1

ยืนยันว่างานถูกลบออกจากตารางของงานที่แอ็คทีฟโดยใช้คำสั่ง jobs -l ในการแสดงรายการกระบวนการที่กำลังทำงานทั้งหมดรวมถึงการยกเลิกใช้งานคำสั่ง ps aux

อีกวิธีหนึ่งในการทำให้กระบวนการทำงานต่อไปหลังจากที่ shell exit คือใช้ nohup

คำสั่ง nohup เรียกใช้งานโปรแกรมอื่นที่ระบุเป็นอาร์กิวเมนต์และละเว้น SIGHUP (hangup) ทั้งหมด SIGHUP เป็นสัญญาณที่ถูกส่งไปยังกระบวนการเมื่อปิดเทอร์มินัลการควบคุม

หากต้องการรันคำสั่งในเบื้องหลังโดยใช้คำสั่ง nohup ให้พิมพ์:

nohup command &

เอาต์พุตคำสั่งถูกเปลี่ยนเส้นทางไปยังไฟล์ nohup.out

nohup: ignoring input and appending output to 'nohup.out'

ทางเลือก

มีหลายโปรแกรมที่ช่วยให้คุณมีเซสชันการโต้ตอบหลายรายการพร้อมกัน

จอภาพ

Screen หรือ GNU Screen เป็นโปรแกรม multiplexer เทอร์มินัลที่ช่วยให้คุณเริ่มเซสชันของหน้าจอและเปิดหน้าต่าง (เทอร์มินัลเสมือน) จำนวนเท่าใดก็ได้ภายในเซสชันนั้น กระบวนการที่ทำงานในหน้าจอจะยังคงทำงานต่อไปเมื่อหน้าต่างของพวกเขาไม่ปรากฏแม้ว่าคุณจะถูกตัดการเชื่อมต่อ

Tmux

Tmux เป็นทางเลือกใหม่ในหน้าจอ GNU ด้วย Tmux คุณสามารถสร้างเซสชันและเปิดหลายหน้าต่างภายในเซสชันนั้นได้ เซสชัน Tmux ยังคงอยู่ซึ่งหมายความว่าโปรแกรมที่ทำงานใน Tmux จะยังคงทำงานต่อไปแม้ว่าคุณจะปิดเครื่องก็ตาม

ข้อสรุป

หากต้องการเรียกใช้คำสั่งในพื้นหลังให้ใส่ & ที่ส่วนท้ายของคำสั่ง

เมื่อคุณเรียกใช้คำสั่งในพื้นหลังคุณไม่ต้องรอจนกว่าคำสั่งจะเสร็จสิ้นก่อนจึงจะสามารถดำเนินการคำสั่งอื่นได้

nohup fg bg งานปฏิเสธเทอร์มินัล