我不知道怎么做,我需要的是在"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
。