Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
24.07.2021, 23:19:59

.
Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
  • Mitglieder insgesamt: 25776
  • Letzte: joba48
Statistiken
  • Beiträge insgesamt: 746689
  • Themen insgesamt: 60054
  • Heute online: 375
  • Am meisten online: 2287
  • (22.01.2020, 19:20:24)
Benutzer Online

Autor Thema:  Bash. Wie zwei Programmteile gleichzeitig ausführen ?  (Gelesen 532 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Bisher habe ich bei den Dingen die ich in bash gebastelt habe, immer alles von oben nach unten ab gearbeitet. Nun möchte ich mich daran probieren auch Programmteile, wie z.B. zwei Schleifen zu selben Zeit ablaufen lassen zu können.

Zum Test habe ich zwei .sh Dateien erstellt, die ich per Hand starten und zeitgleich ablaufen lassen kann.

Gegeben:
schleife_1.sh
#!/bin/bash
while true; do
    echo "sleep 1 Schleife aus schleife_1.sh"
    echo
    sleep 1
done

schleife_2.sh
#!/bin/bash
while true; do
    echo "sleep 5 Schleife aus schleife_2.sh"
    echo
    sleep 5
done

* Scheinbar kann man per "start.sh" die "schleife_1.sh und die "schleife_2.sh zeitgleich im durch die start.sh geöffneten Terminal laufen lassen.

start.sh
#!/bin/bash
./schleife_1.sh & ./schleife_2.sh

Im Terminal sieht die Ausgabe wie folgt aus:
sleep1 Schleife aus schleife_1.sh

sleep 5 Schleife aus schleife_2.sh

sleep1 Schleife aus schleife_1.sh

sleep1 Schleife aus schleife_1.sh

sleep1 Schleife aus schleife_1.sh

sleep1 Schleife aus schleife_1.sh

sleep 5 Schleife aus schleife_2.sh

sleep1 Schleife aus schleife_1.sh
...

Frage:
* Ist das ein Trugschluss oder geht das wirklich so zwei Schleifen in einem Script gleichzeitig laufen lassen zu können ?
* Wie müsste man ein .sh Script aufrufen, wenn man es in einem eigenständigen Terminal Fenster laufen lassen möchte ?
* Kann man die Terminalausgabe vlt. sogar irgend wie formatieren, so das die Ausgabe der einen Schleife z.B. auf der linken Hälfte und die der anderen Schleife in der rechten Hälfte des Terminals dargestellt wird ?

Nachtrag:
* Möglicher Weise kann man ein Terminal mit "Screen" in mehrere Teile unterteilen. Ob das ein übliches Verfahren ist oder man das vlt. auch ohne Zusatzsoftware kann, kann ich nicht beurteilen.
Quelle: https://www.linux-community.de/ausgaben/linuxuser/2015/03/geteilter-ansicht/
« Letzte Änderung: 08.10.2020, 00:59:40 von John.Miller »

Re: Bash. Wie zwei Programmteile gleichzeitig ausführen ?
« Antwort #1 am: 08.10.2020, 07:52:48 »
Moin,

>> * Ist das ein Trugschluss oder geht das wirklich so zwei Schleifen
>> in einem Script gleichzeitig laufen lassen zu können ?

Du kannst mehrere Befehle gleichzeitig und unabhängig von einander ablaufen lassen. Durch das "&" schickst du Befehl 1 in den Hintergrund. Schau dir dazu "jobs", "bg" und "fg" an.

bg: Bringt den mit JOBBEZEICHNUNG bezeichneten Job in den Hintergrund, als ob er mit »&« gestartet wurde. Wenn JOBBEZEICHNUNG nicht angegeben ist, wird der aktuelle Job verwendet.

Re: Bash. Wie zwei Programmteile gleichzeitig ausführen ?
« Antwort #2 am: 08.10.2020, 08:26:56 »
Durch das "&" schickst du Befehl 1 in den Hintergrund.
Was eben anders als von mir erwartet ist, ist das das folgende die Ausgaben aus beiden aufgerufenen Scripten in ein und dem selben Terminal macht und eben nicht nur die Ausgaben des nicht in den Hintergrund geschickten.
#!/bin/bash
./schleife_1.sh & ./schleife_2.sh
« Letzte Änderung: 08.10.2020, 08:38:34 von John.Miller »

Re: Bash. Wie zwei Programmteile gleichzeitig ausführen ?
« Antwort #3 am: 08.10.2020, 08:47:29 »
Du kannst 2 Terminalfenster benutzen.
[Zaunpfahlwink]
Jeder Desktop hat sein eigenes X-Terminal.
[/Zaunpfahlwink]

Re: Bash. Wie zwei Programmteile gleichzeitig ausführen ?
« Antwort #4 am: 08.10.2020, 08:56:59 »
Meines Wissens beherrschen die Shells nicht die Möglichkeit des "Threadings", also das parallele/nebenläufige Ausführen von Code innerhalb eines Prozesses.

Mit dem & werden defakto zwei von einander unabhängige Prozesse gestartet, was man mit ps auch sehen kann.

Re: Bash. Wie zwei Programmteile gleichzeitig ausführen ?
« Antwort #5 am: 14.10.2020, 07:58:15 »
Zitat
* Ist das ein Trugschluss oder geht das wirklich so zwei Schleifen in einem Script gleichzeitig laufen lassen zu können ?
Man kann aus einem Skript heraus Subshells mit eingebettetem Code starten, die dann im Hintergund laufen. Dazu müssen die Befehle in Klammern gesetzt werden. Das geht natürlich auch mit Schleifen.
(sleep 5; echo "blah"; sleep 10) &
Zitat
* Wie müsste man ein .sh Script aufrufen, wenn man es in einem eigenständigen Terminal Fenster laufen lassen möchte ?
z.B. mit xterm:
xterm -fa 'Monospace' -fs 18 -e "echo \"blah\"; sleep 5;"
« Letzte Änderung: 14.10.2020, 08:01:19 von ralf72 »