对于MacOS(Mavericks),我正在制作一个shell脚本来收集命令dd
的传输统计信息。
手册页说:
如果dd收到SIGINFO(参见stty(1)的status参数)信号, 当前的输入和输出块计数将写入 标准错误输出的格式与标准完成相同 消息。
因此,就像在Linux中一样,我试过:
kill -INFO <pid_of_dd>
命令成功完成,状态为0,但是dd
进程连接到的终端,标准输出/标准错误中没有统计信息。
那么让dd
在其输出中打印统计数据的正确方法是什么?
答案 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] [ <=> ]
(传输数据的大小,经过的时间和速度)
您还可以输入图像的大小(本例中为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