我有一个bash脚本,如下所示:
#!/bin/bash
wget LINK1 >/dev/null 2>&1
wget LINK2 >/dev/null 2>&1
wget LINK3 >/dev/null 2>&1
wget LINK4 >/dev/null 2>&1
# ..
# ..
wget LINK4000 >/dev/null 2>&1
但是处理每一行直到命令完成然后转移到下一行非常耗时,我想一次处理例如20行,然后当它们完成时再处理另外20行。
我曾考虑过wget LINK1 >/dev/null 2>&1 &
将命令发送到后台并继续执行,但是这里有4000行,这意味着我将遇到性能问题,更不用说受限于我应该同时启动多少个进程,所以这不是一个好选择理念。
我现在正在考虑的一种解决方案是检查其中一个命令是否仍在运行,例如,在20行之后,我可以添加以下循环:
while [ $(ps -ef | grep KEYWORD | grep -v grep | wc -l) -gt 0 ]; do
sleep 1
done
当然,在这种情况下,我需要在行的末尾添加&!但是我感觉这不是正确的方法。
因此,我实际上如何将每20行分组在一起并等待它们完成,然后再转到下20行,该脚本是动态生成的,因此我可以在生成脚本时对其进行所需的任何数学运算,但不必使用wget,这只是一个示例,因此任何特定于wget的解决方案都不会给我带来任何好处。
我认为这个问题应该重新讨论。“可能重复”的质量检查就是关于并行运行有限数量的程序。像2-3个命令。但是,这个问题集中在例如循环中运行命令。(请参阅“但有4000行”)。
—
VasiliNovikov
@VasyaNovikov您是否已阅读 有关此问题和重复项的所有答案?在此,每个问题的答案也可以在重复问题的答案中找到。这正是重复问题的定义。是否循环运行命令绝对没有区别。
—
robinCTS
@robinCTS有交叉点,但是问题本身是不同的。此外,链接的质量检查中最受欢迎的6个答案仅涉及2个过程。
—
VasiliNovikov
我建议重新打开该问题,因为它比链接的问题的答案更清晰,更干净,更好,而且被更高程度地支持,尽管它是最近三年了。
—
Dan Nissenbaum '18
wait
是这里的正确答案,但是使用proctoolswhile [ $(ps …
会更好得多……也就是说,出于正当理由,请检查具有特定名称的进程是否仍在运行。while pkill -0 $KEYWORD…