80

I think that top is great application to monitor a Linux system. I really like it, but top doesn't look so good on Mac. I know that Mac have a system monitor to do it, but I prefer using a terminal.

I have installed htop by running:

brew install htop.

Here is what it looks like:

PID USER     PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
    1 0          0   0     0     0     0 ?  0.0  0.0  0:00.00 (launchd)
   10 0          0   0     0     0     0 ?  0.0  0.0  0:00.00 (kextd)
   11 0          0   0     0     0     0 ?  0.0  0.0  0:00.00 (UserEventAgent)
   12 65         0   0     0     0     0 ?  0.0  0.0  0:00.00 (mDNSResponder)

The problem is that both CPU and MEM aren't returning the real values of either on my system.

Has anyone else experienced this? Or, could some one point me in the right direction?

5 Answers 5

92

I have the same problem so I check the recipe.

$ brew edit htop

Then I check this part of the recipe:

def caveats; <<-EOS.undent
    For htop to display correctly all running processes, it needs to run as root.
    If you don't want to `sudo htop` every time, change the owner and permissions:
    cd #{bin}
    chmod 6555 htop
    sudo chown root htop
EOS

So just type sudo htop and you will see CPU and MEM.

5
  • 19
    You can use brew info htop to see caveats content
    – A B
    Mar 29, 2013 at 20:36
  • 4
    This is helpful for those who installed with macports as well; for me, I don't know why, but sudo htop didn't work. htop was installed in /bin, so I cd'd there and ran chmod 6555 htop && sudo chown root htop. Now htop works fine. Sep 29, 2014 at 20:22
  • 1
    @AB not anymore, they changed it. Apr 6, 2015 at 20:11
  • 4
    This solution allows any user to kill any other user's (or root's) processes. Is there a way to allow htop to read CPU and MEM without allowing it to modify the system?
    – Max
    Sep 2, 2015 at 22:56
  • If you want to modify htop wherever it's installed, use chmod 6555 "$(which htop)" Jun 19, 2017 at 13:05
21

From my brew info:

You can either run the program via `sudo` or set the setuid bit:

  sudo chown root:wheel /usr/local/Cellar/htop-osx/0.8.2.2/bin/htop

  sudo chmod u+s /usr/local/Cellar/htop-osx/0.8.2.2/bin/htop

This worked to ensure that I don't need to run htop as sudo

6

Here is an alternative for those who don't want to muck with the permissions and still avoid typing sudo htop in preference to just htop:

  1. Install with brew: brew install htop
  2. Allow sudo htop to run without sudo password
    1. Run sudo visudo to open the sudoers file in an editor
    2. Add this to the config file: %admin ALL=(ALL) NOPASSWD: /usr/local/bin/htop
    3. Save the file and exit (:wq most likely)
  3. Add the following alias to your shell rc file (example is for ~/.bashrc or ~/.profile): alias htop='sudo htop'
1

In case anyone comes across this, the location of htop has moved, so the correct answer given by @Ivan above can be done using readlink and which to make sure it always points to the correct htop location.

sudo chown root:wheel $(readlink -fn $(which htop))
sudo chmod u+s $(readlink -fn $(which htop))

Also, for me, htop version 3.2.2 gives the same output using this setuid version as running with sudo.

0

Note that for the latest versions of htop to function correctly on OS X, it is not sufficient to "bless" htop with chmod 6555 htop and sudo chown htop - while htop will run, the output will differ between htop and sudo htop.

Here's a screenshot of the "blessed" htop instance, invoked as htop:

enter image description here

and here's a picture of it running as sudo htop:

enter image description here

As you can see, the non-sudo-invoked htop displays significantly less information.

The correct answer was presented by @Sukima; it is unfortunately required to alias htop to sudo htop. For command line users, typing in the password at the prompt is second nature and I think for most of us it's forgetting to launch htop as sudo that is the problem rather than being required to type in the password. I highly advise against allowing sudo htop to run without a password prompt, but if you do wish to do so, the best approach is to allow a single, named user to launch htop (and only htop) without a password (though this is a huge vulnerability since htop is powerful and extensible and can run external commands, which means whoever runs htop as sudo can do anything):

sudo visudo
# add the line below somewhere in the editor
YOURUSERNAME ALL=(ALL) NOPASSWD: /usr/local/bin/htop
# save and exit

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .