Answering questions about processes via the terminal

As a programmer, when troubleshooting, I often find myself asking: Is that other thing even running? It could be a program incidental to what I’m working on – maybe Node or MySQL. Learning a few Bash commands makes answering questions like “Is this thing running? or “What ports is that program using?” fast.

Note: most of these commands assume a unix-y machine, like Linux or OSX.

What processes are running?

Processes are instances of a programs running on a computer. To see a list of active processes, use the ps command.

ps aux

The above examples uses the aux options, where:

a shows all processes, even those not owned by the current user u shows names of users whose file access permissions are used by the process x used in combination with a, will show all processes (read the man page for more nuance) For other options, check out Computer Hope or the man page.

The output should be a long list, in this format:

USER               PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
christianwood 554 4.8 1.3 4527320 107032 ?? R 7:07PM 0:21.94 /Applications/Utilities/Terminal.app/Contents/MacOS/Terminal

The ps command becomes more powerful when combined with other commands, like less and grep.

Paginate results

The less command paginates output. Using a pipe to pass the output of the ps command to less, we have:

ps aux | less

Once the output is displayed with less, use the j key to scroll down. To quit, type q.

Search for processes by name

We can interact with processes by referencing their identifier. Let’s say you want to know what process id Node.js has:

ps aux | grep node

Note: Watch out for grep catching itself in the ps output. Some variations of grep avoid this problem.

Say the output says that Node.js has a PID of 123, you could then stop that process by using the kill command:

kill 123

Read the man page of the kill command for more options.

See live-updating list of processes

To see a live-updating list of processes, use top. If you’re on a server without a GUI and want to see what programs are using CPU or memory with live updates, top or its sibling htop are great tools.

What files and network ports are processes using?

Sometimes you might want to know what files a process is using. We can see them with the lsof (list of open files) command.

These files might be literal files, like fonts or images in use by Google Chrome.

lsof | grep Chrome | less

This command searches for the list of open files for the word Chrome, and will likely return a long list of files in use by Google Chrome.

Find processes with TCP connections

The lsof command can also show all the processes with active TCP connections:

lsof -i TCP

See more options on the lsof man page.

Find processes using a specific port

This filtering functionality frequently speeds up local development troubleshooting. Say you want to start a new local server with Node.js on port 3000, but receive this error: Error: listen EADDRINUSE :::3000. This means there is already a process using that port on your machine.

Track it down by running:

lsof -i :3000

The output will include the PID, which you can then use to kill the process.

Conclusions

Overall, knowing how to answer questions about processes improves troubleshooting skills and computer literacy. So go see what’s running on your machine!