如果命令执行速度很快,Linux bash将进入睡眠状态

时间:2019-05-15 18:37:09

标签: linux bash shell sleep

在linux bash上,我想确保命令执行花费10秒或更长时间,因此,如果提早完成,我需要添加一些睡眠,以便整体执行将花费10秒以上。

如果您想知道为什么要确保第三方后台守护程序作业(每10秒运行一次)将它接起来。

我所拥有的是: public static float calcFeetAndInchesToCentimeters(int inches){ if(inches >= 0){ return (float)inches / 12; }else{ return -1; } } 但这将使整体执行时间增加10秒,因此,如果命令本身花费10秒或更长的时间,它将仍然增加10秒。如果命令花费的时间少于10秒,有没有办法睡觉?

编辑: 我还希望在执行结束时返回sleep 10; my_command.sh的退出代码。因此,包括睡眠在内的整个命令应返回与my_command.sh相同的退出代码。

2 个答案:

答案 0 :(得分:4)

您可以在后台运行sleep 10,并在wait完成后运行my_command.sh

sleep 10 & my_command.sh; wait

如果还有其他后台作业,它也会等待它们。在这种情况下,您可以在 subshel​​l 中运行它,例如:

( sleep 10 & my_command.sh; wait )

或将sleep 10的PID保留在变量中并等待它,因此my_command.sh将在当前执行环境中运行,例如:

sleep 10 & pid=$!; my_command.sh; wait "$pid"

答案 1 :(得分:4)

使用bash:

#!/bin/bash
SECONDS=0
# place your code here
rest=$((10-$SECONDS))
[[ $rest -gt 0 ]] && sleep $rest

更新:使用函数并将返回码保存到变量:

#!/bin/bash

foo() {
  local SECONDS=0
  local returncode

  # place your code here
  returncode=$?

  rest=$((10-$SECONDS))
  [[ $rest -gt 0 ]] && sleep $rest

  return $returncode
}

foo
echo $?