如何知道并行运行的所有后台命令的进程号

时间:2018-10-19 10:58:58

标签: arrays bash shell

我正在编写一个Shell脚本以在后台运行各种进程。我想知道如何等待脚本的执行,直到所有后台进程(并行运行)都已完成。

#!/usr/bin/env bash

ARRAY='cat bat rat'

for ARR in $ARRAY
do
    ./run_script1 $ARR &
done

P1=$!
wait $P1

echo "INFO: Execution of all background processes in the for loop has completed.."

在这里,我使用了变量$!,该变量给出了最后一个后台命令的进程号,但是我希望每个并行运行的后台命令的进程号。

如何实现?

1 个答案:

答案 0 :(得分:2)

如果您要等待所有孩子,则不需要知道他们的pid,只需不带参数调用wait
来自wait --help

  

如果未提供ID,则等待所有当前活动的子进程,并且返回状态为零。

但是如果出于某种原因要列出所有子项的pid,则可以使用:

jobs -p