我有以下代码,可以使用 docker 容器提交多个子作业:
#!/bin/bash
for file in "all files of a given type"; do
docker exec -itd "docker container" "command to be executed within docker container" &
done
pidlist=$(pgrep -f "command to be executed within docker container")
for pid in $pidlist; do
echo $pid
wait $pid
done
我的目标是让脚本等待退出,直到所有子作业完成。我需要这个,因为该脚本是包含其他命令和脚本的较大脚本的一部分。
但是,我获得的 PID 与我在终端使用 top 查找子作业时不同,因此脚本在提交所有子作业后退出。
答案1
您不需要等待显式的 pid;如果您的脚本所做的只是启动一些后台进程,您可以等待它们全部完成。尝试这样的事情:
#!/bin/bash
for file in "all files of a given type"; do
docker exec -itd "docker container" "command to be executed within docker container" &
done
wait
脚本的此修改版本会启动一些后台进程,然后等待所有进程终止。