[gelöst] zwei endlosschleifen gleichzeitig in einem shell skript?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tomi89
Beiträge: 269
Registriert: 21.08.2014 00:21:52

[gelöst] zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von tomi89 » 03.02.2019 18:28:37

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 :o.

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.

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von RobertDebiannutzer » 03.02.2019 19:14:04

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!):

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.

reox
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von reox » 03.02.2019 19:14:19

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

tomi89
Beiträge: 269
Registriert: 21.08.2014 00:21:52

Re: zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von tomi89 » 03.02.2019 20:01:37

reox hat geschrieben: ↑ zum Beitrag ↑
03.02.2019 19:14:19
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
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
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von reox » 03.02.2019 20:03:31

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.

DeletedUserReAsG

Re: zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von DeletedUserReAsG » 03.02.2019 20:07:12

tomi89 hat geschrieben: ↑ zum Beitrag ↑
03.02.2019 20:01:37
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.
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
Beiträge: 269
Registriert: 21.08.2014 00:21:52

Re: zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von tomi89 » 03.02.2019 20:23:17

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.

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

DeletedUserReAsG

Re: zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von DeletedUserReAsG » 03.02.2019 20:32:54

tomi89 hat geschrieben: ↑ zum Beitrag ↑
03.02.2019 20:23:17
Der gesamte Code wäre zu lang und undurchsichtig wenn man ihn nicht kennt.
Wenn du ihn posten würdest, würde man ihn ja kennen ;)

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.


reox
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von reox » 03.02.2019 20:48:20

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.

tomi89
Beiträge: 269
Registriert: 21.08.2014 00:21:52

Re: zwei endlosschleifen gleichzeitig in einem shell skript?

Beitrag von tomi89 » 03.02.2019 21:09:38

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.

Benutzeravatar
RobertS
Beiträge: 512
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?

Beitrag von RobertS » 04.02.2019 10:20:02

Rückgabewert der Schleife abfragen? Und die Wartezeit für die nächste Schleife erst nach vollständiger Abarbeitung der Ersten starten?

Antworten