服务器

如何查看Linux系统中dd命令执行进度

位置:首页 > 服务器 > linux服务器,2013-11-14
dd命令是Linux系统管理员常用的命令之一,有些时候想查看该命令的执行进度却不知道该如何操作,这里给大家介绍下如何在Linux系统中查看dd命令的执行进度的小

dd命令是Linux系统管理员常用的命令之一,有些时候想查看该命令的执行进度却不知道该如何操作,这里给大家介绍下如何在Linux系统中查看dd命令的执行进度的小技巧。

在一个终端中开启一个dd进程


1
ddif=/dev/zeroof=/data3/testbs=1k count=1024000

在另外一个终端中用while来反复执行killall命令

1
whilekillall -USR1dd;dosleep5;done

然后就能看到间隔5秒一次的输出结果了

1
2
3
4
5
6
7
8
9
10
11
12
292289+0 recordsin
292288+0 records out
541861+0 recordsin
541860+0 records out
760037+0 recordsin
760036+0 records out
886602+0 recordsin
886601+0 records out
1007881+0 recordsin
1007880+0 records out
1024000+0 recordsin
1024000+0 records out

所执行的killall命令循环会在dd命令执行结束之后退出。

说明:

可能不熟悉linux的人会问了,为什么dd命令的进度输出要killall命令来激发呢?其实答案很简单,dd的进度输出就是这么设计的,再详细点就是dd命令在执行的时候接收到SIGUSR1信号的输出当前的读写进度,而killall命令在这里起的作用就是给dd进程发送这个信号。

killall命令,和kill命令一样,其作用是给指定的进程发送一个信号过去,不是平常所理解的仅仅是结束一个进程,就像下面摘录的man kill里面描述的一样。


1
2
3
4
5
6
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 5; done”就是每隔5秒就给所有的dd命令进程发送一个USR1信号,dd命令进程接收到信号之后就打印出自己当前的进度。因为kill命令能传递的信号不仅仅是SIGTERM(kill pid)和SIGKILL(kill -9 pid),还有很多其他的信号值,在这里面还有一个很经常用的就是SIGHUP(1)了,对于没有那些不与终端交互的守护进程(Deamon Process),通常的设计是在接收到SIGHUP信号之后就会重新读取配置文件。比如下面的


1
2
3
# 当你对smb.conf修改之后,运行下面的命令,修改就能生效了
# 而不用再来一个smb restart
killall -HUP smbd

TAGS:查看dd命令执行进度

猜你喜欢

NewHot