[gelöst] zwei endlosschleifen gleichzeitig in einem shell skript?
[gelöst] zwei endlosschleifen gleichzeitig in einem shell skript?
Hallo,
ich würde gerne 2 Endlosschleifen gleichzeitig und parallel in einem Shellskript ausführen (und nicht ineinander verschachtelt).
Die erste Endlosschleife soll via "sleep 10" regelmässig ausgeführt werden.
Und die zweite Endlosschleife soll parallel zur ersten via "sleep 60" regelmässig ausgeführt werden.
Ist das auch möglich?
Ich habe zu erst versucht die erste zu forken aber dann wollte meine CPU-Auslastung irgendwann durch die Decke explodieren .
Und ineinander verschachtelt funktionieren sie nicht so wie sie es eigentlich sollen.
ich würde gerne 2 Endlosschleifen gleichzeitig und parallel in einem Shellskript ausführen (und nicht ineinander verschachtelt).
Die erste Endlosschleife soll via "sleep 10" regelmässig ausgeführt werden.
Und die zweite Endlosschleife soll parallel zur ersten via "sleep 60" regelmässig ausgeführt werden.
Ist das auch möglich?
Ich habe zu erst versucht die erste zu forken aber dann wollte meine CPU-Auslastung irgendwann durch die Decke explodieren .
Und ineinander verschachtelt funktionieren sie nicht so wie sie es eigentlich sollen.
Zuletzt geändert von tomi89 am 03.02.2019 21:11:02, insgesamt 1-mal geändert.
-
- Beiträge: 385
- Registriert: 16.06.2017 09:52:36
Re: zwei endlosschleifen gleichzeitig in einem shell skript?
Wahrscheinlich wird Dir eher jemand antworten, wenn Du die zwei Code-Schnipsel, die Du bisher hast, zeigst.
Warum z.B. funktioniert der verschachtelte Ansatz nicht? Also sowas wie das hier (nur ein Modell!):
Warum z.B. funktioniert der verschachtelte Ansatz nicht? Also sowas wie das hier (nur ein Modell!):
Code: Alles auswählen
#!/bin/bash
i=0
while true; do
sleep 10
i=$((i+1))
echo "every 10 seconds"
if [ $i -eq 6 ]; then
echo "every 60 seconds"
i=0
fi
done
Zuletzt geändert von RobertDebiannutzer am 03.02.2019 19:14:48, insgesamt 1-mal geändert.
Re: zwei endlosschleifen gleichzeitig in einem shell skript?
Du kannst an die Schleife ein & anhängen, dann kannst du gleich die nächste starten:
Code: Alles auswählen
while true; do
echo "schleife 1"
sleep 10
done &
while true; do
echo "schleife 2"
sleep 60
done
Re: zwei endlosschleifen gleichzeitig in einem shell skript?
Genauso hatte ich es zu Erst auch versucht. Aber irgendwie hat sich die CPU-Auslastung immer weiter erhöht so als hätte ich eine Forkbombe gebaut.reox hat geschrieben:03.02.2019 19:14:19Du kannst an die Schleife ein & anhängen, dann kannst du gleich die nächste starten:
Code: Alles auswählen
while true; do echo "schleife 1" sleep 10 done & while true; do echo "schleife 2" sleep 60 done
Re: zwei endlosschleifen gleichzeitig in einem shell skript?
vielleicht hattest du das sleep an der falschen stelle?
Poste doch mal das script was du hast hier, dann kann man evt sehen wo der fehler liegt.
Poste doch mal das script was du hast hier, dann kann man evt sehen wo der fehler liegt.
Re: zwei endlosschleifen gleichzeitig in einem shell skript?
Du bist sicher, dass das Problem nicht durch das verursacht wird, was sich in den Schleifen befindet? Leider scheint’s ja geheim zu sein, deswegen kann man eigentlich nur sagen: der Beispielcode von reox funktioniert jedenfalls.tomi89 hat geschrieben:03.02.2019 20:01:37Genauso hatte ich es zu Erst auch versucht. Aber irgendwie hat sich die CPU-Auslastung immer weiter erhöht so als hätte ich eine Forkbombe gebaut.
Re: zwei endlosschleifen gleichzeitig in einem shell skript?
Also so weit war ich jetzt:
Der gesamte Code wäre zu lang und undurchsichtig wenn man ihn nicht kennt.
Durch Forken wollte ich zu Erst die erste Schleife in den Hintergrund befördern.
Jedoch dauert der Code manchmal ziemlich lange, was wohl auf Grund der zu schnellen erneuten Ausführung zu der CPU Belastung führte.
Die Schlafzeit zu erhöhen hätte allerdings auch Nachteile weil der erste Code manchmal schnell durchläuft.
Der gesamte Code wäre zu lang und undurchsichtig wenn man ihn nicht kennt.
Durch Forken wollte ich zu Erst die erste Schleife in den Hintergrund befördern.
Jedoch dauert der Code manchmal ziemlich lange, was wohl auf Grund der zu schnellen erneuten Ausführung zu der CPU Belastung führte.
Die Schlafzeit zu erhöhen hätte allerdings auch Nachteile weil der erste Code manchmal schnell durchläuft.
Code: Alles auswählen
while
true
do
echo "Code A. Braucht mal länger und mal weniger lang."
sleep 25
done &
while
true
do
echo "Code B."
sleep 10
done
Re: zwei endlosschleifen gleichzeitig in einem shell skript?
Wenn du ihn posten würdest, würde man ihn ja kennentomi89 hat geschrieben:03.02.2019 20:23:17Der gesamte Code wäre zu lang und undurchsichtig wenn man ihn nicht kennt.
Dann könnte man möglicherweise sogar sinnvollere Konstrukte vorschlagen, als es fixe Zeiten bei variabler Ausführungszeit des Inhalts bei gleichzeitiger Abhängigkeit voneinander in zwei unabhängigen Schleifen wären. Das erscheint mir nämlich als die schlechteste aller Möglichkeiten.
Re: zwei endlosschleifen gleichzeitig in einem shell skript?
Und wenn du das ausführst hast du eine hohe CPU load?
Mit den Schleifen schaut jedenfalls richtig aus.
edit: wie meinst du zu schnelle erneute ausführung? das sleep bewirkt immer das 25s lang nichts getan wird. Es ist ja kein Scheduler der alle 25s den code ausführt, egal ob der noch läuft oder nicht.
Mit den Schleifen schaut jedenfalls richtig aus.
edit: wie meinst du zu schnelle erneute ausführung? das sleep bewirkt immer das 25s lang nichts getan wird. Es ist ja kein Scheduler der alle 25s den code ausführt, egal ob der noch läuft oder nicht.
Re: zwei endlosschleifen gleichzeitig in einem shell skript?
Ja seit das "&" hinter der ersten Schleife steht steigt die CPU-Last langfristig stark an.
Wahrscheinlich weil der Code etwas länger gebraucht hat als die Schlafzeit lang war weil ich noch andere Sachen im Hintergrund laufen hatte.
Vor allem bei den ersten Durchläufen.
Aber ein Scheduler ist ein gutes Stichwort.
Ich sollte auch sicherstellen das der Code erst erneut ausgeführt wird nachdem er zu Ende gelaufen ist.
Danke für den Tipp.
Dann gleich nochmal google besuchen.
Also wenn die Schleifen ordentlich sind setze ich mal auf gelöst.
Vielen Dank für die Antworten.
Wahrscheinlich weil der Code etwas länger gebraucht hat als die Schlafzeit lang war weil ich noch andere Sachen im Hintergrund laufen hatte.
Vor allem bei den ersten Durchläufen.
Aber ein Scheduler ist ein gutes Stichwort.
Ich sollte auch sicherstellen das der Code erst erneut ausgeführt wird nachdem er zu Ende gelaufen ist.
Danke für den Tipp.
Dann gleich nochmal google besuchen.
Also wenn die Schleifen ordentlich sind setze ich mal auf gelöst.
Vielen Dank für die Antworten.
- RobertS
- Beiträge: 516
- Registriert: 15.04.2012 13:50:53
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Rastatt BaWü
Re: [gelöst] zwei endlosschleifen gleichzeitig in einem shell skript?
Rückgabewert der Schleife abfragen? Und die Wartezeit für die nächste Schleife erst nach vollständiger Abarbeitung der Ersten starten?