Jak mogę uruchomić nieskończoną pętlę w tle, kontynuując wykonywanie skryptu?
Przykład „skrypt”:
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
To (zauważ &
) wydaje się powodować awarię całego systemu po krótkiej chwili:
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
Odpowiedzi:
Z
&
wewnętrzną pętlą rozpocznie nowy proces w tle i tak szybko, jak to będzie możliwe, bez oczekiwania na zakończenie pierwszego procesu. Zamiast tego myślę, że chcesz umieścić pętlę w tle, więc umieść&
samą pętlę jakźródło
Wcześniejsze muszle Bourne nie miał
true
ifalse
jak wbudowanych komend.true
zamiast tego został po prostu alias do:
ifalse
do czegoś podobnegolet 0
.&
na końcu linii tło procesu:
to polecenie zerowe, zgodnie z opisem w „help:”:No effect; the command does nothing. Exit Status: Always succeeds.
źródło
:
znaczy i prawdopodobnie nie wie, dlaczego przesunąłeś ją&
do końca. Również zmiana odstępów, aby uczynić z niej jedną linijkę, jest po prostu myląca - jest to zmiana, która jest bardzo widoczna, ale całkowicie nieistotna.Uśpienie np. 1 lub 0,01 sekundy sprawi, że pętla będzie bardziej przyjazna dla procesora. Ale jak wskazano Eric Renouf, znak & powinien znajdować się na końcu pętli, a nie wewnątrz niej.
źródło