(我已经搜索过并期望以前有人问过这个问题,但找不到类似的问题,尽管有很多类似的问题)
我希望这个 for 循环在 3 个不同的线程/进程中运行,并且wait
似乎是正确的命令
for file in 1.txt 2.txt 3.text 4.txt 5.txt
do something lengthy &
i=$((i + 1))
wait $!
done
但我猜这个构造只启动一个线程,然后等到它完成后再启动下一个线程。我可以放置wait
在循环之外但是我该怎么办
- 访问pid?
- 将其限制为 3 个线程?
The jobs
builtin 可以列出当前正在运行的后台作业,因此您可以使用它来限制创建的数量。要将您的工作限制为三项,请尝试以下操作:
for file in 1.txt 2.txt 3.txt 4.txt 5.txt; do
if [ $(jobs -r | wc -l) -ge 3 ]; then
wait $(jobs -r -p | head -1)
fi
# Start a slow background job here:
(echo Begin processing $file; sleep 10; echo Done with $file)&
done
wait # wait for the last jobs to finish
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)