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

时间:2013-12-25 11:42:25

标签: macos shell signals posix

对于MacOS(Mavericks),我正在制作一个shell脚本来收集命令dd的传输统计信息。

手册页说:

  

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

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

kill -INFO <pid_of_dd>

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

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

4 个答案:

答案 0 :(得分:35)

您也可以在“终端”选项卡中按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)

答案 1 :(得分: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
$

答案 2 :(得分:2)

我还通过commandlinefu发现你也可以这样做:

killall -INFO dd

如果您必须运行sudo dd才能启动dd,您可以尝试:

sudo killall -INFO dd

此外,我在后台启动了dd并使用了nohup,所以当我运行sudo killall -INFO dd并且没有任何回复输出时我必须记得去查看{{1因为这是记录响应的地方。

在OS X Mavericks上工作得很好。

答案 3 :(得分:0)

您可以在dd命令运行时按Ctrl + T,或者为了拥有一个漂亮的进度条,您可以使用自制软件安装pv(管道查看器):

brew install pv

然后将pv置于

之间
dd if=diskimage.img | pv | dd of=/dev/disk2

示例输出1

    18MB 0:00:11 [1.70MiB/s] [      <=>                          ]

(传输数据的大小,经过的时间和速度)

进度条和ETA

您还可以输入图像的大小(本例中为16GB),以便:

dd if=diskimage.img | pv -s 16G | dd of=/dev/disk2

示例输出2 (还有进​​度条和估计时间):

    1.61GiB 0:12:19 [2.82MiB/s] [===>                 ] 10% ETA 1:50:25