如何让dd在MacOS中打印传输统计数据?

13 macos shell posix signals

对于MacOS(Mavericks),我正在制作一个shell脚本来收集随时间推移的转移统计信息dd.

手册页说:

如果dd收到SIGINFO(参见stty(1)的状态参数)信号,则当前输入和输出块计数将以与标准完成消息相同的格式写入标准错误输出.

因此,就像在Linux中一样,我试过:

kill -INFO <pid_of_dd>
Run Code Online (Sandbox Code Playgroud)

该命令成功完成,状态为0,但是dd进程连接到的终端,标准输出/标准错误中没有统计信息.

那么dd在输出中打印统计数据的正确方法是什么?

Cor*_*rke 36

您也可以在终端选项卡中按Ctrl + T以获得相同的行为:

MacBook-Pro:~ $ dd if=~/source_image.dmg of=/dev/disk1
load: 0.87  cmd: dd 7229 uninterruptible 0.21u 3.91s
265809+0 records in
265808+0 records out
136093696 bytes transferred in 131.170628 secs (1037532 bytes/sec)
load: 0.99  cmd: dd 7229 uninterruptible 0.32u 5.89s
415769+0 records in
415768+0 records out
212873216 bytes transferred in 203.357068 secs (1046795 bytes/sec)
Run Code Online (Sandbox Code Playgroud)


Jon*_*ler 7

它似乎对我有用:

$ dd if=/dev/zero of=/dev/null bs=1k &
[1] 33990
$ kill -INFO 33990
4787784+0 records in
4787784+0 records out
4902690816 bytes transferred in 4.260769 secs (1150658706 bytes/sec)
$ kill -INFO 33990
8357846+0 records in
8357846+0 records out
8558434304 bytes transferred in 7.428820 secs (1152058392 bytes/sec)
$ kill 33990
$ ps
  PID TTY           TIME CMD
 1342 ttys000    0:00.02 -bash
 2290 ttys001    0:00.17 -bash
[1]+  Terminated: 15          dd if=/dev/zero of=/dev/null bs=1k
$
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢,后来我意识到`kill`返回状态0但没有将信号发送到`dd`,因为`dd`是root拥有的.圣诞节快乐. (2认同)