如何从 bash shell 脚本中获取 PID

如何从 bash shell 脚本中获取 PID

我有以下代码,可以使用 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

脚本的此修改版本会启动一些后台进程,然后等待所有进程终止。

相关内容