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
Jawaban:
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 sepertisumber
Shell Bourne sebelumnya tidak memiliki
true
danfalse
sebagai perintah bawaan.true
bukan hanya alias:
, danfalse
untuk sesuatu sepertilet 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.
sumber
:
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.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.
sumber