今天因工作需要,要抓取top记录中的CPU统计这行,类似如下的内容:
CPU states: 68.3% idle, 22.3% user, 7.6% kernel, 1.8% iowait, 0.0% swap
需要把这段内容重定向到文件中,但是使用top -b 这样的参数不能实现这样的效果,重定向到文件中的内容如下:
last pid: 53372; load averages: 0.00, 0.00, 0.00 up 1+03:32:16 18:28:11
37 processes: 1 running, 35 sleeping, 1 zombie
Mem: 22M Active, 342M Inact, 60M Wired, 2068K Cache, 111M Buf, 459M Free
Swap: 6144M Total, 6144M Free
中间丢失了有关CPU统计的信息。
觉得比较奇怪,于是找来了另外一台FreeBSD的机器来看看(公司的是solaris),结果也是同样的情况。问我老婆
是否知道,结果她给我了一串top -b -n 1 -c > top.log。我试了下,不行!但是她说她那边是可以的。于是我问
了下她用的操作系统,结果是linux的。哦~~,可能找到问题了,于是我找来一个linux的机器测试了下,果然跟操
作系统有关。我晕了。找了好多地方都没有类似这样的实现方法。
最后还是在一个之前看过的网页中找到了办法,这个网页之前被我忽略了,以为是一般的问题。后来按照上面说的
以-d参数来实现(应该是指delay的意思吧)。top -d 2 这样就有了,如下:
last pid: 53376; load averages: 0.00, 0.00, 0.00 up 1+03:32:48 18:28:43
39 processes: 1 running, 37 sleeping, 1 zombie
CPU states: % user, % nice, % system, % interrupt, % idle
Mem: 23M Active, 342M Inact, 60M Wired, 2068K Cache, 111M Buf, 457M Free
Swap: 6144M Total, 6144M Free
原来是unix在统计信息的时候,一开始没有CPU的信息,需要过几秒种才有显示。这就是-d参数的作用了。
完整的用法:top -d 2 0 | grep CPU。这样就显示了上面开始时所提出的显示内容了。