几秒钟后停止"dd"循环



我不知道怎么做,我需要的是在"c"秒后,dd停止。但它一直在工作,忽略while循环和seconds脚本

read c
end=$((SECONDS+$c))
while [ $SECONDS -lt $end ]; do
    echo "Moving..."
    dd if=/dev/zero of=/dev/null 
done

添加我的注释作为完整性的答案:

要在给定时间后停止进程,如果系统提供timeout,则可以使用它运行进程;它是GNU核心实用程序的一部分(但显然不是由POSIX指定的(。

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

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

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

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

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

最新更新