Linux下查看dd命令执行进度

您所在的位置:网站首页 如何查看itunes备份进度 Linux下查看dd命令执行进度

Linux下查看dd命令执行进度

2024-03-19 09:21| 来源: 网络整理| 查看: 265

转载地址,同时也进行了一些补充。谢谢原作者。

经常使用dd命令制作linux系统盘,相当方便迅速。但是用了这么久,突然就想,要是能够知道dd现在的进度该多好,于是查了查,果然找到了。

刻盘的时候,我们先在一个shell中使用dd,比如我们把Arch Linux的镜像刻到U盘/dev/sdc中:

lgl@pArch ~/Downloads $ sudo dd if=archlinux-2016.04.01-dual.iso of=/dev/sdc 此时,在另一个shell中,我们输入: lgl@pArch ~ $ sudo watch -n 5 pkill -USR1 ^dd$ 或者: lgl@pArch ~ $ sudo watch -n 5 pkill -USR1 -x dd 然后,当前终端会显示: Every 5.0s: pkill -USR1 -x dd 此时,使用dd命令的终端会显示进度,直到结束。 lgl@pArch ~/Downloads $ sudo dd if=archlinux-2016.04.01-dual.iso of=/dev/sdc [sudo] lgl 的密码: 记录了234881+0 的读入 记录了234881+0 的写出 120259072 bytes (120 MB, 115 MiB) copied, 21.7691 s, 5.5 MB/s 记录了286353+0 的读入 记录了286353+0 的写出 146612736 bytes (147 MB, 140 MiB) copied, 26.7881 s, 5.5 MB/s 记录了338249+0 的读入 记录了338249+0 的写出 173183488 bytes (173 MB, 165 MiB) copied, 31.8169 s, 5.4 MB/s ……

解释:

watch - execute a program periodically, showing output fullscreen

watch负责周期性执行一个程序,使用-n可以指定执行的时间间隔。-d则会高亮出这次执行和上次执行的结果变化了的地方。所以watch -n 5 pkill -USR1 ^dd$就是每五秒执行一次pkill -USR1 ^dd$。

pgrep, pkill - look up or signal processes based on name and other attributes

pkill是根据名称或其他属性来查询进程或给进程发信号的。 所以pkill -USR1 ^dd$就是给dd进程发送信号USR1,USR1这个信号在man dd里有解释:

Sending a USR1 signal to a running ‘dd’ process makes it print I/O statistics to standard error and then resume copying.

也就是说只要给dd发送USR1信号,它就会在标准错误输出中输出I/O数据,并继续复制 (dd的进度输出就是这么设计的,再详细点 就是dd命令在执行的时候接收到SIGUSR1信号的输出当前的读写进度,而pkill命令在这里起的作用就是给dd进程发送这个信号)。这样的话就实现了当前进度的输出。  命令中最后的^dd$自然是筛选名称中仅含有dd的进程,否则,所有名称中包含dd字段的进程都会被选中。我们做个实验:

lgl@pArch ~ $ pkill -USR1 dd pkill: killing pid 2 failed: 不允许的操作 pkill: killing pid 43 failed: 不允许的操作 pkill: killing pid 282 failed: 不允许的操作 pkill: killing pid 548 failed: 不允许的操作 pkill: killing pid 2475 failed: 不允许的操作 lgl@pArch ~ $ ps -A | grep dd 2 ? 00:00:00 kthreadd 43 ? 00:00:00 ipv6_addrconf 282 ? 00:00:00 sddm 548 ? 00:00:00 sddm-helper 2475 pts/2 00:00:04 dd 2488 ? 00:00:00 ksysguardd

由上面可以看到,pkill果然是向所有名称中包含dd的进程都发送信号了。

另外,除了使用正则的表示方式之外,我们还可以使用-x来指定进程名:

-x, –exact  Only match processes whose names (or command line if -f is specified) exactly match the pattern.

所以,pkill -USR1 -x dd 的作用就是向明确指定进程的名字就是dd的进程发送USR1信号。

所以说,我们通过pkill(发信号)和watch(周期性执行命令)的结合来实现了dd进度的查看。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3