How to call ‘top’ on a remote machine using ssh 8

Some times it is not straight forward to call some remote commands using ssh (example of syntax here). Commands like top will not execute as is because they need some environment variables modified due to their interactive nature.

Usage example of wrong remote call to top and its result:

ssh remoteMachine 'top'
TERM environment variable not set.

We cannot really describe all of the solutions available but since we are talking about top, we will present a very simple solution.
Luckily, top can be executed in batch mode, which is used for sending output from top to other programs or files by invoking the -b parameter and thus changing the command syntax to:

ssh remoteMachine 'top -b'

This will work just fine but give you a full page of results which might be too much info. To limit the results that you are receiving you can filter the top command results with other commands like head. In the following example we use head to limit the number of rows retrieved to 8, so that we get the system status and the most computational intensive command of our system.

ssh remoteMachine 'top -b | head -n 8'

Which will result to something like this:

top - 07:29:38 up 1:04, 0 users, load average: 2.85, 2.83, 2.24
Tasks: 62 total, 2 running, 60 sleeping, 0 stopped, 0 zombie
Cpu(s): 27.8%us, 0.4%sy, 0.0%ni, 71.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1022116k total, 68960k used, 953156k free, 4364k buffers
Swap: 3905532k total, 0k used, 3905532k free, 22776k cached

842 userName 20 0 32212 1320 1120 R 188 0.1 46:51.91 application.binary

This post is also available in: Greek

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

8 thoughts on “How to call ‘top’ on a remote machine using ssh

  • Selinda Mosred

    Thanks, it also save my time, because my “top” command isnt working still but your “top -b | head -n 8” works fine…

    • George Michael


      What is it you are trying to achieve?

      Executing ssh user@remote ‘top -b -d 0.1’ will show you the remote processes and refresh every 0.1 seconds.
      Executing ssh user@remote ‘top -b -d 10’ will show you the remote processes and refresh every 10 seconds.

    • George Michael

      You have a point but please do not forget that, some servers could abort the transaction if a pseudo-terminal is requested.
      Not using -t (or using -T) eliminates this issue.

      For reference:

      -T Disables pseudo-terminal allocation.
      -t Forces pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine.