Use lsof and ps to Find Running Services

Learn how to use the lsof and ps utilities to find running services when debugging EADDRINUSE in NodeJS logs.

thumbnail for Use lsof and ps to Find Running Services

Sometimes when attempting to run a NodeJS server locally, you may see an error with:

Error: listen EADDRINUSE: address already i use 127.0.0.1:4567

To determine what's listening on this port (and potentially stop it), you can use a combination of the lsof and ps commands.

First, use lsof -P -i :<PORT> replacing <PORT> with the port you want to check.

We use the -P with lsof since we likely don't need the mapping for the port to a name in the network files1.

Take the PID from lsof and run ps <PID> to find what's running on this port. If it's okay to kill it, run kill <PID> and try to re-run your command again.

Footnotes

  1. By using lsof -P, it ignores the host machines conversion of port numbers to port names for network files. For example, if we ran lsof without -P, the NAME column would contain services that run on those ports, such as port 4567 for bcm-reporting or 4568 for tram. If you're interested in seeing what service MacOS expects to be serving on a specific port, you can run the following command and replace 4567 with the port you're curious about: cat /etc/services | grep " 4567/tcp".

Was this page helpful?

Subscribe to my Newsletter

Every other week I publish the Curiously Crafted newsletter.

In it, I explore the intersection of curiosity and craft: the people who make stuff, what they make and the way they pursue the craft of making.

The curious logo of Chase Adams: glasses and a bow tie.stay curious.