Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何知道并行运行的所有后台命令的进程号_Arrays_Bash_Shell - Fatal编程技术网

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

Arrays 如何知道并行运行的所有后台命令的进程号,arrays,bash,shell,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.

我正在编写一个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.."
这里我使用了变量
$
它给出了最后一个后台命令的进程号,但我想让每个后台命令的进程号并行运行


如何实现这一点?

如果您想等待所有的孩子,您不需要知道他们的PID,只需调用
wait
,无需参数。
等待--help

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

但如果出于某种原因希望列出所有子项的PID,可以使用:

jobs -p

如果您想等待所有的孩子,您不需要知道他们的PID,只需调用
wait
而不带参数。
等待--help

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

但如果出于某种原因希望列出所有子项的PID,可以使用:

jobs -p

使用不带任何参数的
wait
。谢谢,这很有效。但是假设我仍然想知道后台作业的进程ID。如何实现它?每次启动后台作业时,将PID添加到数组中
doJob&
然后
pids+=($!)
您实际上想要实现的总体目标是什么?使用GNU Parallel可能会做得更好。我想启动(比方说)3个后台作业,并显式地等待每个作业完成。使用
wait
,不带任何参数。谢谢,这很有效。但是假设我仍然想知道后台作业的进程ID。如何实现它?每次启动后台作业时,将PID添加到数组中
doJob&
然后
pids+=($!)
您实际上想要实现的总体目标是什么?使用GNU Parallel,您可能会做得更好。我想启动(比方说)3个后台作业,并显式地等待它们中的每一个完成..是的,
wait
无参数工作。但是假设我仍然想知道后台作业的进程ID。如何实现它?使用
jobs-p
获取所有后台作业的PID。“children”的意思是“后台工作”。是的,
wait
无参数工作。但是假设我仍然想知道后台作业的进程ID。如何实现它?使用
jobs-p
获取所有后台作业的PID。“儿童”是指“背景工作”。