【发布时间】:2022-12-16 04:30:11
【问题描述】:
我有一个 BASH,可以在我的 BASH 中并行运行 3 个函数。
functionA () {
......
my command || { echo "ERROR!!" >> $LOG_FILE ; exit 1 ;}
}
functionB () {
......
my command || { echo "ERROR!!" >> $LOG_FILE ; exit 1 ;}
}
functionC () {
......
my command || { echo "ERROR!!" >> $LOG_FILE ; exit 1 ;}
}
functionA &
functionB &
functionC &
wait
我在所有函数中都有一些命令用于错误处理,如下所示:
my command || { echo "ERROR!!" >> $LOG_FILE ; exit 1 ;}
我注意到即使我在所有函数中都有用于错误处理的 exit 1,但其他函数仍在继续。如果任何函数失败,如何停止 bash 并返回退出代码 1?
我是 BASH 的新手,非常感谢您的帮助!
【问题讨论】:
-
由于并行进程彼此不了解,我的方法是等到其中一个进程终止,检查退出代码,如果它不为零,则杀死其余(正在运行的)进程。为了管理这个,我会使用一个数组来存储那些仍在运行的后台进程的所有 PID。
-
@user1934428 你能详细说明一下吗?我对如何在捕获退出代码的同时独立等待每个子进程完成感兴趣;
wait内置函数似乎不允许这样做。 -
@Fravadona:见here