为什么 dd 仅在我按 Ctl+t 时输出?

为什么 dd 仅在我按 Ctl+t 时输出?

这是 OSX 的情况。当我在终端中运行它时

scottcarlson$ sudo dd if=Downloads/CentOS-7-x86_64-Everything-1511.iso of=/dev/disk2 2> Desktop/out.txt

然后这个在另一个

tail -f Desktop/out.txt

Ctlt它仅在我按第一个终端时更新日志dd。这是因为性质吗dd

我不知道它到底是如何写入设备的,但是对于进程来说,休息一下并写入日志是否要求太高?

答案1

仅当我在第一个终端中使用 dd 按 Ctlt 时,它才会更新日志。这是因为 dd 的性质吗?

是的。它的本质是dd当接收到给定信号时输出其当前状态。在大多数操作系统下,此信号是SIGUSR1标准信号,但在 OS X 上,它使用名为 的非标准信号SIGINFO。此外,OS X 有一个tty驱动程序设置,允许使用组合键发送特定信号,CtrlT就像在所有操作系统上CtrlC发送一样。SIGQUIT

我不知道它到底是如何写入设备的,但是对于进程来说,休息一下并写入日志是否要求太高?

您正是要求它使用快捷方式执行此操作。如果您想要定期自动更新,没有什么会禁止您执行像这样的简单 shell 循环:

while kill -INFO $(pgrep dd); do sleep 5; done

这假设pgrep在 OS X 上可用。否则,选择命令piddd并将其用作kill第二个参数。

答案2

您看到的ctlt是正在运行的进程信息的摘要,而不是dd输出。

dd不输出任何进度信息,与您预期的不同。

如果您想从另一个终端窗口查看实际进度,请查看输出文件大小的变化。在这种情况下,您正在写入原始磁盘,因此耐心可能是您最好的朋友。

答案3

在 OS-X 上,如果您运行,stty -a您会看到这^T是以下组合键status

% stty -a | grep '\^T'
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;

man dd

 If dd receives a SIGINFO (see the status argument for stty(1)) signal,
 the current input and output block counts will be written to the standard
 error output in the same format as the standard completion message.  If

两者一起意味着在dd运行时,点击^T将导致写入摘要显示。

相关内容