So führen Sie eine Endlosschleife im Hintergrund aus

17

Wie kann ich eine Endlosschleife im Hintergrund ausführen, während ich mit der Ausführung des Skripts fortfahre?

Beispiel "script":

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

Dies &scheint nach kurzer Zeit das ganze System zum Absturz zu bringen:

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
user12a
quelle
Kein Wunder, dass Sie viele Prozesse erstellen.
Ed Heal
Nach dem Weg für eine Gabelbombe fragen?
Baazigar
1
Könnten Sie bitte die Absicht hinter dem Ausführen einer Endlosschleife im Hintergrund erklären?
Neuron

Antworten:

31

Mit der &Innenseite der Schleife wird ein neuer Prozess im Hintergrund gestartet und zwar so schnell wie möglich, ohne auf das Ende des ersten Prozesses zu warten. Stattdessen denke ich, dass Sie die Schleife in den Hintergrund stellen möchten, also setzen Sie die &auf die Schleife selbst wie

while /bin/true; do
    something_in_the_background
done &

# more stuff
Eric Renouf
quelle
10
while : ; do something ; done &
  • Frühere Bourne-Shells hatten keine trueund falseals eingebaute Befehle. truewurde stattdessen einfach auf :und falseauf so etwas ausgerichtet let 0.

  • & am Ende der Zeile wird der Vorgang hinterlegt

  • : ist der Null-Befehl, wie er von "help:" beschrieben wird: No effect; the command does nothing. Exit Status: Always succeeds.
John
quelle
2
Ihre Antwort würde sich erheblich verbessern, wenn Sie sie erläutern - das OP weiß möglicherweise nicht, was es :bedeutet, und wahrscheinlich nicht, warum Sie das &zu Ende geführt haben. Das Ändern des Abstands, um daraus einen Einzeiler zu machen, ist nur verwirrend - es ist eine Änderung, die sehr gut sichtbar, aber völlig unwichtig ist.
Derobert
Bearbeitet den Beitrag gemäß Ihren Bewertungen
John
0

Wenn Sie beispielsweise .1 oder .01 Sekunden in den Ruhezustand schalten, wird Ihre Schleife CPU-freundlicher. Aber Eric Renouf hat darauf hingewiesen, dass sich das & am Ende der Schleife befinden sollte und nicht darin.

daltonfury42
quelle