有没有办法让“ top”运行一次并退出?


13

我发现shell命令的输出top是一种简单而熟悉的方式,它可以使您对机器的运行状况有一个大概的了解。我想top从一台机器上的小型Web服务器提供的输出(或与之非常相似的输出),以进行粗略监视。

有没有一种方法可以使top仅仅一次编写其文本输出,而无需格式化字符?我已经试过了:

(sleep 1; echo 'q') | top > output.txt

这似乎与我想要的接近,除了(1)无法保证我不会获得多于或少于一屏的信息,以及(2)我必须去除所有终端格式化字符。

还是有其他top类似的命令同时列出了计算机范围和进程级别的内存/ CPU使用率/正常运行时间信息?

(理想情况下,我喜欢一种可移植到Linux和Mac OS X的策略,因为我们的开发人员使用Mac,而我们的产品环境是Linux。)

Answers:


22

在Linux中,您可以尝试以下操作:

top -bn1 > output.txt

来自man top

-b : Batch-mode operation
            Starts top in 'Batch' mode, which could be useful for sending
            output from top to other programs or  to  a  file.   In  this
            mode, top will not accept input and runs until the iterations
            limit you've set with the '-n' command-line option  or  until
            killed.
....
-n : Number-of-iterations limit as:  -n number
            Specifies  the  maximum  number of iterations, or frames, top
            should produce before ending.

对于OS X,请尝试:

top -l 1

OSX顶级手册页

 -l <samples>
              Use logging mode and display <samples> samples, even if 
              standard output is a terminal. 0 is treated  as  infinity.   
              Rather than redisplaying, output is periodically printed in 
              raw form. Note that the first sample displayed will have an 
              invalid %CPU displayed for each process,  as it is calculated 
              using the delta between samples.

如果top在OS X上支持-b标志,这似乎正是我要寻找的答案。:-(可悲的是,这不,我没有看到一个版本,top可以通过自制这似乎正是针对Linux的正确答案,寿。
Mickalot

@Mickalot:看我的更新。您可以在Mac OSX中安装GNU top吗?
cuonglm 2014年

@Gnuoc:/usr/bin/top -l 1在OSX 10.9.4 上是完美的...谢谢!至于安装GNU top,我可以将其安装在我的机器上,但是我必须说服其他开发人员将其安装在他们的机器上,以便我的代码可以为他们工作,所以我宁愿避免这种情况。(如果不能通过自制软件访问,则会遇到阻力。)现在,我将基于平台进行切换,我会很贪心...您是否知道任何Windows半等效的设备,所以那些开发人员(几个)还可以有一个原始状态页面?(如果没有,那很好,您的回答已经很有帮助!)
Mickalot 2014年

@Mickalot:请记住OSX顶部手册上的注释,请注意,显示的第一个示例将为每个进程显示一个无效的%CPU,因为它是使用示例之间的差异计算得出的。。对于Windows用户,也许您可​​以使用“ cygwin`
cuonglm

@Gnuoc感谢您的加分。我想我可以top -l 2扔掉样本的第一页吗?
米卡洛特2014年

1

要从Windows系统获得类似的类型编号,您需要查看一下powershell。

只是为了获得您要查看的进程列表get-process。看看这个参考

在进行进一步的搜索时,在这里找到了一个不错的小命令。

如果您退出呈现的while循环,那么您的需求将是:

ps | sort -desc cpu | select -first 30

ps在powershell中是的别名get-process


这听起来像一个好主意!我将让我的Windows同事之一尝试一下...
Mickalot 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.