最新消息:阿啰哈,本人90后,目前单身,欢迎妹子们来撩!.(。→‿←。)

查看dd命令的执行进度

Commands 林志斌 670浏览

今天在commandlinefu.com网站看到这么一篇文章check the status of 'dd' in progress,试了下,效果很好。
现在一个终端中开启一个dd进程
dd if=/dev/zero of=/data3/test bs=1M count=10240
然后在另外一个终端中用while来反复执行killall命令
while sudo killall -USR1 dd; do sleep 1; done
然后就能看到间隔1秒一次的输出结果了
9996+1 records in
9996+1 records out
10481618944 bytes (10 GB) copied, 148.055 s, 70.8 MB/s
10084+1 records in
10084+1 records out
10573893632 bytes (11 GB) copied, 149.202 s, 70.9 MB/s
10239+1 records in
10239+1 records out
10736422912 bytes (11 GB) copied, 151.403 s, 70.9 MB/s
所执行的killall命令循环会在dd命令执行结束之后退出。
说明
可能不熟悉linux的人会问了,为什么dd命令的进度输出要killall命令来激发呢?其实答案很简单,dd的进度输出就是这么设计的,再详细点就是dd命令在执行的时候接收到SIGUSR1信号的输出当前的读写进度,而killall命令在这里起的作用就是给dd进程发送这个信号。
killall命令,和kill命令一样,其作用是给指定的进程发送一个信号过去,不是平常所理解的仅仅是结束一个进程,就像下面摘录的man kill里面描述的一样。
DESCRIPTION
       The command kill sends the specified signal to the specified process or process group.  If no signal is specified, the  TERM  signal  is  sent. The  TERM  signal  will  kill processes which do not catch this signal. For other processes, it may be necessary to use the  KILL  (9)  signal, since this signal cannot be caught.
所以上面的”while killall -USR1 dd; do sleep 1; done”就是每隔1秒就给所有的dd命令进程发送一个USR1信号,dd命令进程接收到信号之后就打印出自己当前的进度。
因为kill命令能传递的信号不仅仅是SIGTERM(kill pid)和SIGKILL(kill -9 pid),还有很多其他的信号值,在这里面还有一个很经常用的就是SIGHUP(1)了,对于没有那些不与终端交互的守护进程(Deamon Process),通常的设计是在接收到SIGHUP信号之后就会重新读取配置文件。比如下面的
# 当你对smb.conf修改之后,运行下面的命令,修改就能生效了
# 而不用再来一个smb restart
killall -HUP smbd

via: http://www.dbabeta.com/2009/dd-progress.html

转载请注明:林志斌 » 查看dd命令的执行进度

发表评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址