我有 2 个或更多构建进程要在后台运行。如果其中一个进程以非 0 代码退出,我想停止所有构建进程。
./build-1.sh &
./build-2.sh &
./build-3.sh &
wait
#other steps
目前,我使用wait
需要等待所有进程完成的版本。但是,如果其中一个进程失败,我想停止所有其他构建。我该怎么做?
答案1
您正在寻找的通常称为 a named pipe
,用于进程间通信 (IPC)。关于在 Bash 中创建命名管道,有很多很棒的文档,所以我将为此编写代码留给您。
一旦有了命名管道,您就可以执行以下操作:将每个进程的 PID 写入管道(使用 Bash 特殊变量$$
表示当前 PID),然后让每个进程循环检查每个 PID 是否存在。如果遇到不再存在的 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