2017-04-03 3 views
0

Ich habe dieses Code-Schnipsel, um make t1, make t2 und make t3 parallel zu starten.Parallelen Prozess ausführen und alle beenden, wenn einer fehlschlägt

Gibt es eine Möglichkeit, den Rest der make-Prozesse zu beenden, wenn einer fehlschlägt? Wenn beispielsweise make t2 fehlschlägt, sollte das Skript zwei andere laufende (make t1 und make t3) ausführen und herauskommen.

for ARG in '"t1" "t2" "t3"' 
do 
    cd ${ARG} 
    make ${ARG} & pid=$! 
    PID_LIST+=" $pid"; 
    cd - 
done 
trap "kill $PID_LIST" SIGINT 
echo "Parallel makes have started $PID_LIST" 
wait $PID_LIST 
+0

Warum Sie 'eval' verwenden? 'für arg in" t1 "t2" t3 "; mach "$ arg" & pids + = ($!); done' – chepner

+0

Danke, werde es in meinem Code ändern, wie Sie vorgeschlagen haben – rodee

Antwort

1

Mit Parallel GNU

parallel --halt now,fail=1 'cd {}; make {}' ::: t1 t2 t3 
+0

Dank Mark, ich habe mein Code-Snippet aktualisiert, ich muss zu einem anderen Verzeichnis cd wechseln, bevor 'make', so kann ich nicht club' make''s in eine Zeile. – rodee

+0

@Krish Sie wechseln immer in dasselbe Verzeichnis in Ihrem Code ..., und Sie können trotzdem mehrere Befehle mit 'parallel' ausführen. Ich habe den Code aktualisiert. –

+0

Das war ein Tippfehler, bitte sieh jetzt, dir Namen sind anders. – rodee

Verwandte Themen