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

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

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.

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.