我使用以下 bash 脚本并行运行多个命令。它实际上会等待所有并行命令完成,然后继续。现在,我想改变这个 bash,让它只等待第一个“kill”,而这个 kill 来自哪个命令的执行并不重要。有什么建议吗?
for cmd in "$@"; do {
echo "Process \"$cmd\" started";
$cmd & pid=$!
PID_LIST+=" $pid";
} done
trap "kill $PID_LIST" SIGINT
echo "Parallel processes have started";
wait $PID_LIST
echo
echo "All processes have completed";
答案1
您可以通过捕获 SIGCHLD 信号来检测子进程是否已经结束。