gpt4 book ai didi

bash - 如何循环运行固定数量的进程?

转载 作者:行者123 更新时间:2023-11-29 09:20:12 25 4
gpt4 key购买 nike

我有一个这样的脚本:

#!/bin/bash
for i=1 to 200000
do
create input file
run ./java
done

我需要同时运行多个(8 或 16 个)进程 (java),但我不知道该怎么做。我知道 wait 会有所帮助,但它应该一直运行 8 个进程,而不是等待前 8 个进程完成后再启动其他 8 个进程。

最佳答案

bash 4.3 为 wait 命令添加了一个有用的新标志,-n,它会导致 wait阻塞直到任何单个后台作业完成,而不仅仅是给定子集(或所有)的成员。

#!/bin/bash
cores=8 # or 16, or whatever
for ((i=1; i <= 200000; i++))
do
# create input file and run java in the background.
./java &

# Check how many background jobs there are, and if it
# is equal to the number of cores, wait for anyone to
# finish before continuing.
background=( $(jobs -p) )
if (( ${#background[@]} == cores )); then
wait -n
fi
done

有一个小的竞争条件:如果您处于最大负载但作业完成之后您运行jobs -p,您仍然会阻塞直到另一个作业完成。您对此无能为力,但在实践中应该不会造成太多麻烦。


bash 4.3 之前,您需要定期轮询后台作业集以查看作业池何时下降到您的阈值以下。

while :; do
background=( $(jobs -p))
if (( ${#background[@]} < cores )); then
break
fi
sleep 1
done

关于bash - 如何循环运行固定数量的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32464050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com