【发布时间】:2018-04-13 18:23:01
【问题描述】:
(我已经搜索并期望之前有人问过这个问题,但是尽管有很多类似的问题,但找不到类似的问题)
我希望这个 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 个线程?
【问题讨论】:
-
我是否理解正确,您希望在三个线程中处理五个相互独立的任务(在发生时排队),
wait的唯一目的是确保没有其他事情发生在所有五个人都退出之前? -
你不一定要给
wait一个PID。如果您在没有参数的情况下调用wait,它将等待所有后台进程,因此将wait放在done之后将等待所有线程完成。不确定如何限制为 3 个线程... -
@Dario 我有两个函数,1 和 2。1(上面的那个)可以并行化,但 2 在处理完所有 5 个文件之前不能运行。我有 4 个核心,我需要留下一个,这样其他所有东西都可以不间断地运行。如果我正确理解您的问题,则分析器是“是”,
-
这些是进程,而不是线程。
-
bash本身并不适合维护这样的进程池。