我有以下脚本:
command file1 &
command file2 &
command file3 &
command file4 &
command file5 &
command file6 &
# SOME OTHER COMMAND
command file7 &
command file8 &
command file9 &
command file10 &
command file11 &
command file12 &
在“其他命令”的位置,我想要一个命令来停止执行下一个命令,直到它之前的所有进程都完成,以便我有效地“批量”运行命令。我怎样才能做到这一点?
您应该能够使用 bash shell 的内置
wait
命令。来自man bash
(强调我的):所以
如果你想有点花哨,一个 bash 脚本
xargs
当您使用不同的参数运行相同的命令时,这是一个很好的选择。-P 32
告诉 xargs 一次最多运行 32 个进程。该-n 1
方法最多将一个参数传递给命令(没有它,它可能会将所有文件发送到单个命令,因此不会并行执行)。因此,在这种情况下,请设置
-P
为您的批量大小。另一个选项(和好处)是您可以设置-P
您想要实际使用的并行度。虽然该&
方法将为每个命令启动一个进程,但 xargs 会将进程数限制为您设置的数量。这意味着您可以将并行度定位到您拥有的内核数量,或者使用较小的数量来防止大批量进程使您的机器陷入爬行状态。哦,当然,
command
用你的实际命令替换。