วิธีเรียกใช้การวนซ้ำไม่สิ้นสุดในพื้นหลัง


17

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

ตัวอย่าง "script":

while true; do something_in_the_background; done

do_something_while_the_loop_goes_on_in_the_background

for 1 2 3; do somethingelse; done

exit 0

สิ่งนี้ (สังเกตเห็น&) ดูเหมือนว่าจะผิดพลาดทั้งระบบหลังจากนั้นครู่หนึ่ง:

while true; do
  something_in_the_background &
done

do_something_while_the_loop_goes_on_in_the_background

for 1 2 3; do somethingelse; done

exit 0

ไม่แปลกใจเลยที่คุณกำลังสร้างกระบวนการมากมาย
Ed Heal

ถามทิศทางสำหรับการวางระเบิดหรือไม่?
Baazigar

1
คุณช่วยบอกความตั้งใจในการใช้วงวนไม่สิ้นสุดในเบื้องหลังได้ไหม?
เซลล์ประสาท

คำตอบ:


31

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

while /bin/true; do
    something_in_the_background
done &

# more stuff

10
while : ; do something ; done &
  • เชลล์ Bourne รุ่นก่อนหน้านี้ไม่มีtrueและfalseเป็นคำสั่งในตัว trueแทนที่จะเป็นเพียงนามแฝง:และเพื่อสิ่งที่ต้องการfalselet 0

  • & ในตอนท้ายของพื้นหลังบรรทัดกระบวนการ

  • : คือคำสั่ง null ตามที่อธิบายโดย "help:": No effect; the command does nothing. Exit Status: Always succeeds.

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

แก้ไขโพสต์ตามความคิดเห็นของคุณ
John

0

การพัก sleep ของการพูด 0.1 หรือ 0.1 วินาทีจะทำให้การวนรอบของ CPU ของคุณเป็นมิตรมากขึ้น แต่ตามที่ระบุไว้คือ Eric Renouf & ควรอยู่ที่ท้ายวงไม่ใช่ด้านใน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.