【问题标题】:Stop "dd" inside a while loop after seconds几秒钟后在while循环内停止“dd”
【发布时间】:2020-06-20 06:53:50
【问题描述】:

我不知道该怎么做,我需要的是在“c”秒后,dd 停止。但它继续工作并忽略while循环和秒 脚本

read c
end=$((SECONDS+$c))

while [ $SECONDS -lt $end ]; do
    echo "Moving..."
    dd if=/dev/zero of=/dev/null 

done

【问题讨论】:

  • 你可以做类似timeout "$c" dd if=/dev/zero of/dev/null 的事情,而不是你的循环。但是你想达到什么目的?也许有更好的方法。
  • 这正是我想要的,我不知道存在超时,谢谢

标签: bash loops scripting


【解决方案1】:

添加我的评论作为完整性的答案:

要在给定时间后停止进程,如果您的系统提供,您可以使用timeout 运行它;它是 GNU coreutils 的一部分(但显然没有被 POSIX 指定)。

在你的情况下,你可以运行而不是循环

timeout "$c" dd if=/dev/zero of/dev/null

【讨论】:

    【解决方案2】:

    这不是循环的工作方式。您的构建将一直运行到dd 完成。如果您想在 c 秒后终止它,您应该使用 timeout 调用它(几乎可以肯定是首选解决方案),或者显式发送信号。例如,类似:

    dd if=/dev/zero of=/dev/null &
    sleep $c
    kill $!
    

    使用& 作为命令终止符会导致dd 异步运行(也称为“在后台”),因此控制立即返回到shell,将dd 命令的pid 存储在变量@987654327 中@。然后,shell 会休眠一段时间并发送信号终止dd

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-03
      • 1970-01-01
      • 2012-09-15
      • 2018-10-22
      • 1970-01-01
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多