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
Antworten:
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 wiequelle
Frühere Bourne-Shells hatten keine
true
undfalse
als eingebaute Befehle.true
wurde stattdessen einfach auf:
undfalse
auf so etwas ausgerichtetlet 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.
quelle
:
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.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.
quelle