Is there a way to get “top” to run exactly once and exit?

I find the output of the shell command top to be a simple and familiar way to get a rough idea of the health of a machine. I’d like to serve top‘s output (or something very similar to it) from a tiny web server on a machine for crude monitoring purposes.

Is there a way to get top to write its textual output exactly once, without formatting characters? I’ve tried this:

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

This seems to be close to what I want, except that (1) there’s no guarantee that I won’t get more or less than one screenful of info and (2) I have to strip out all the terminal formatting characters.

Or is there some other top-like command that lists both machine-wide and process-level memory/CPU usage/uptime info?

(Ideally, I’d love a strategy that’s portable to both Linux and Mac OS X, since our devs use Macs and our prod environment is Linux.)

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

In Linux, you can try this:

top -bn1 > output.txt

From 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.

With OS X, try:

top -l 1

From top OSX manpage:

 -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.

Method 2

To get similar type numbers from a Windows system you will want to take a look at powershell.

Just to get a list of processes you and look at get-process. Take a look at this reference.

In doing some further searches, found a nice little command here.

Which if you take out of the while loop presented, for your needs would be:

ps | sort -desc cpu | select -first 30

ps in powershell is an alias for get-process.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x