Cara menjalankan infinite loop di latar belakang


17

Bagaimana saya bisa menjalankan infinite loop di latar belakang, sambil melanjutkan eksekusi skrip?

Contoh "skrip":

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

Ini (perhatikan &) tampaknya membuat crash seluruh sistem setelah beberapa saat:

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

Tidak heran Anda membuat banyak proses.
Ed Heal

Meminta petunjuk tentang bom fork?
Baazigar

1
Bisakah Anda memberi tahu niat di balik menjalankan loop tak terbatas di latar belakang?
neuron

Jawaban:


31

Dengan bagian &dalam loop itu akan memulai proses baru di latar belakang dan secepat itu dapat melakukannya lagi tanpa menunggu proses pertama berakhir. Sebaliknya saya pikir Anda ingin meletakkan loop ke latar belakang, jadi letakkan &di loop itu sendiri seperti

while /bin/true; do
    something_in_the_background
done &

# more stuff

10
while : ; do something ; done &
  • Shell Bourne sebelumnya tidak memiliki truedan falsesebagai perintah bawaan. truebukan hanya alias :, dan falseuntuk sesuatu seperti let 0.

  • & pada akhir garis latar belakang proses

  • : adalah perintah nol, seperti yang dijelaskan oleh "help:": No effect; the command does nothing. Exit Status: Always succeeds.

2
Jawaban Anda akan sangat ditingkatkan dengan menjelaskannya — OP mungkin tidak tahu apa :artinya dan mungkin tidak tahu mengapa Anda telah memindahkannya &sampai akhir. Juga, mengubah spasi untuk menjadikannya satu-baris hanya membingungkan — itu adalah perubahan yang sangat terlihat tetapi sama sekali tidak penting.
derobert

Mengedit pos sesuai ulasan Anda
John

0

Menidurkan mengatakan .1 atau .01 detik akan membuat loop Anda lebih ramah CPU. Tetapi seperti yang ditunjukkan oleh Eric Renouf, tanda & harus berada di akhir perulangan, bukan di dalamnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.