Jak uruchomić nieskończoną pętlę w tle

17

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
użytkownik12a
źródło
Nic dziwnego, że tworzysz wiele procesów.
Ed Heal
Pytanie o drogę do bomby widelcowej?
Baazigar
1
Czy możesz powiedzieć, jaki jest zamiar uruchomienia nieskończonej pętli w tle?
neuron

Odpowiedzi:

31

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

while /bin/true; do
    something_in_the_background
done &

# more stuff
Eric Renouf
źródło
10
while : ; do something ; done &
  • Wcześniejsze muszle Bourne nie miał truei falsejak wbudowanych komend. truezamiast tego został po prostu alias do :i falsedo czegoś podobnego let 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.
Jan
źródło
2
Twoja odpowiedź zostałaby znacznie ulepszona poprzez wyjaśnienie - OP może nie wiedzieć, co to :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.
derobert
Edytowałem post zgodnie z Twoimi recenzjami
John,
0

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.

daltonfury42
źródło