Ich versuche, eine .sh-Datei der viele Programme ausführt gleichzeitig
Ich habe dies versucht
prog1
prog2
Aber das führt prog1 aus, wartet dann, bis prog1 endet und startet dann prog2...
Wie kann ich sie also parallel betreiben?
Ich versuche, eine .sh-Datei der viele Programme ausführt gleichzeitig
Ich habe dies versucht
prog1
prog2
Aber das führt prog1 aus, wartet dann, bis prog1 endet und startet dann prog2...
Wie kann ich sie also parallel betreiben?
Wie wäre es damit:
prog1 & prog2 && fg
Dies wird:
prog1
.prog2
y im Vordergrund halten so können Sie es mit ctrl-c
.prog2
kehren Sie zurück zu prog1
's im Vordergrund so können Sie es auch mit ctrl-c
.Wenn Sie in der Lage sein wollen, mehrere Prozesse einfach auszuführen und zu beenden mit ctrl-c
Dies ist meine Lieblingsmethode: mehrere Hintergrundprozesse in einem (…)
Unterschale, und Falle SIGINT
zur Ausführung kill 0
was alles, was in der Subshell-Gruppe gespawnt wurde, tötet:
(trap 'kill 0' SIGINT; prog1 & prog2 & prog3)
Sie können komplexe Prozessausführungsstrukturen haben, und alles wird mit einer einzigen ctrl-c
(vergewissern Sie sich nur, dass der letzte Prozess im Vordergrund läuft, d. h. schließen Sie keine &
nach prog1.3
):
(trap 'kill 0' SIGINT; prog1.1 && prog1.2 & (prog2.1 | prog2.2 || prog2.3) & prog1.3)
Sie können verwenden wait
:
some_command &
P1=$!
other_command &
P2=$!
wait $P1 $P2
Es ordnet die PIDs des Hintergrundprogramms Variablen zu ( $!
die PID des zuletzt gestarteten Prozesses ist), dann wird die wait
Der Befehl wartet auf sie. Das ist gut, denn wenn Sie das Skript beenden, werden auch die Prozesse beendet!
Mit GNU Parallel http://www.gnu.org/software/parallel/ Es ist so einfach wie:
(echo prog1; echo prog2) | parallel
Oder wenn Sie es vorziehen:
parallel ::: prog1 prog2
Erfahren Sie mehr:
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.