2017-04-03 64 views
0

我有這段代碼,並行啓動make t1,make t2make t3運行並行進程並退出所有如果一個失敗

當一個失敗時,有沒有辦法殺死剩下的make進程?例如,如果make t2失敗,腳本應該終止其他2次運行(make t1make t3)並出來。

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

爲什麼你使用'eval'水貨?對於「t1」「t2」「t3」中的arg;做「$ arg」&pids + =($!);完成' – chepner

+0

謝謝,將改變它在我的代碼中,因爲你建議 – rodee

回答

1

隨着GNU

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

謝謝馬克,我更新了我的代碼片段,我不得不在'make'之前cd到不同的目錄,所以我不能將'make'分成一行。 – rodee

+0

@Krish你總是改變到你的代碼中的同一個目錄中,而且你可以用'parallel'完成多個命令。我已經更新了代碼。 –

+0

這是一個錯字,請現在看,dir的名字是不同的。 – rodee

相關問題