unix下的top命令问题

今天因工作需要,要抓取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。这样就显示了上面开始时所提出的显示内容了。

 

你可能感兴趣的:(unix下的top命令问题)