Arrays 如何知道并行运行的所有后台命令的进程号
我正在编写一个shell脚本来在后台运行各种进程。我想知道如何等待脚本的执行,直到所有后台进程(并行运行)完成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.
#!/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。“儿童”是指“背景工作”。