等到多个进程正在运行

时间:2018-04-04 18:14:22

标签: bash

我想等到三个进程正在运行,所以我使用until循环。这在检查一个过程时有效:

until pgrep my-process; do echo "waiting…"; done

但是,我无法添加其他条件。如果我用单方括号或双方括号包装条件,我会收到错误。具体来说,这两个都失败了。

until [[ pgrep my-process ]]; do echo "waiting…"; done
until [ pgrep my-process ]; do echo "waiting…"; done

如果方括号不适用于第一种情况,我不确定如何做多种情况。

3 个答案:

答案 0 :(得分:3)

方括号不参与组合多个条件。

until pgrep my-process && pgrep my-other-process && pgrep my-last-process; do
  echo "waiting..."
  sleep 1
done

答案 1 :(得分:0)

方括号不用于命令分组。他们实际上做了一套完全不同的条件;你可以只用一个条件的方括号,你可以做多个没有方括号的条件。

untilwhile等所做的是运行指定的命令(在您的示例中为pgrep my-process)并根据命令的退出代码。 [[[只是命令的特定示例,通常可用于测试事物。

要合并多个条件,您可以将&&用于“和”,将||用于“或”([[[命令具有自己的内部语法合并,但如果您愿意,也可以使用&&||。对于更复杂的操作,您可以使用括号进行分组。

答案 2 :(得分:0)

尝试:

until (( `pgrep my-process |wc -l` > 2 )); do
  echo "waiting..."
  sleep 1
done

((表示法用于数字比较。 wc -l显示行数,在这种情况下表示进程数。