
我有 2 個或更多建置進程在後台運行。如果其中一個進程以 0 以外的程式碼退出,我想停止所有建置進程。
./build-1.sh &
./build-2.sh &
./build-3.sh &
wait
#other steps
目前,我使用wait
它需要等待所有進程完成。但如果其中 1 個失敗,我想停止所有其他建置。我該怎麼做呢?
答案1
您正在尋找的通常稱為 a named pipe
,用於進程間通訊 (IPC)。關於在 Bash 中建立命名管道有很多很棒的文檔,因此我將讓您自行編寫程式碼。
一旦你有了一個命名管道,你可以做一些事情,例如將每個進程的 PID 寫入管道(使用$$
當前 PID 的 Bash 特殊變數),然後讓每個進程進入循環檢查是否存在每個 PID。如果它遇到一個不再存在的進程(進程死亡或被殺死),那麼它可以採取行動。
您可以將類似的內容放在腳本的適當部分中。請先測試一下。 :)
trap "rm -f $named_pipe" EXIT
# Assuming you have a file under $named_pipe with space-delimited PIDs
pids = $(< $named_pipe)
while :
do
for pid in pids:
do
if ! kill -0 $pid;
then
exit
fi
done
done