Làm thế nào để chạy một vòng lặp vô hạn trong nền


17

Làm cách nào tôi có thể chạy một vòng lặp vô hạn trong nền, trong khi tiếp tục thực hiện tập lệnh?

Ví dụ "tập lệnh":

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

Điều này (chú ý &) dường như đánh sập toàn bộ hệ thống sau một thời gian ngắn:

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

Không ngạc nhiên khi bạn đang tạo ra nhiều quy trình.
Ed Heal

Hỏi đường cho một quả bom ngã ba?
Baazigar

1
Bạn có thể vui lòng cho biết ý định đằng sau việc chạy một vòng lặp vô hạn trong nền không?
tế bào thần kinh

Câu trả lời:


31

Với &vòng lặp bên trong, nó sẽ bắt đầu một tiến trình mới trong nền và nhanh nhất có thể thực hiện lại mà không cần chờ quá trình đầu tiên kết thúc. Thay vào đó tôi nghĩ rằng bạn muốn đặt vòng lặp vào nền, vì vậy hãy đặt &chính vòng lặp đó như

while /bin/true; do
    something_in_the_background
done &

# more stuff

10
while : ; do something ; done &
  • Các shell Bourne trước đó không có truefalsenhư các lệnh tích hợp. truethay vào đó chỉ đơn giản là bí danh :, và falsevới một cái gì đó như let 0.

  • & ở cuối dòng nền quá trình

  • : là lệnh null, như được mô tả bởi "help:": No effect; the command does nothing. Exit Status: Always succeeds.

2
Câu trả lời của bạn sẽ được cải thiện rất nhiều bằng cách giải thích nó. OP có thể không biết ý :nghĩa của nó và có lẽ không biết tại sao bạn lại chuyển &đến cuối cùng. Ngoài ra, việc thay đổi khoảng cách để biến nó thành một lớp lót chỉ gây nhầm lẫn cho việc đó là một sự thay đổi rất rõ ràng nhưng hoàn toàn không quan trọng.
derobert

Chỉnh sửa bài đăng theo đánh giá của bạn
John

0

Đặt chế độ ngủ nói .1 hoặc .01 giây sẽ giúp vòng lặp của bạn thân thiện hơn với CPU. Nhưng như được chỉ ra là Eric Renouf, & nên ở cuối vòng lặp, không phải bên trong nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.