如果我dd if=/dev/zero of=/dev/null
这样做,就会在终端上显示结果。但我想在特定的时间内运行此命令并显示结果。例如,我尝试过
timeout 10s dd if=/dev/zero of=/dev/nul
但我在终端上没有得到 stdout / stderr 。
我尝试使用一些超时选项,例如“--preserve-status”、“--foreground”和“-v --verbose”,但终端上仍然没有输出。
有没有办法让我的结果显示在终端上,甚至显示在文件中?
答案1
--foreground
将选项 for与signal to timeout
结合使用。INT
dd
timeout --foreground -s INT 0.1 dd if=/dev/zero of=/dev/null
文档timeout
说:
--foreground
when not running timeout directly from a shell prompt,
allow COMMAND to read from the TTY and get TTY signals;
in this mode, children of COMMAND will not be timed out
从我所看到的痕迹等看来,这对于dd
.无需--foreground
进程获取INT
信号但随后CONT
两者dd
都会timeout
迅速导致进程退出。在极少数情况下,dd
确实有时间处理INT
信号,但这不是常态。
永远不会--foreground
发送CONT
并dd
在退出之前有时间打印统计信息。
上面链接的函数cleanup
在第一次迭代调用时被调用sigsuspend
。
dd
sprocess_signals()
极少被称为后 interrupt_signal
已CONT
在处理时设置timeout
(即--foreground
未设置)。
答案2
如果要dd
在 stderr 上显示 的输出(例如使用 中断dd
进程Ctrl+C),请使用 SIGINT 信号而不是默认的 SIGTERM:
timeout -s INT 10s dd if=/dev/zero of=/dev/null
要将 stderr 重定向到 file logfile
,请使用
timeout -s INT 10s dd if=/dev/zero of=/dev/null 2> logfile
答案3
尝试这个:
timeout -s INT --foreground 10s dd if=/dev/zero of=/dev/null