Learn how to use the lsof and ps utilities to find running services when debugging EADDRINUSE in NodeJS logs.
2019-11-12
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.
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"
. ↩
Hey, I'm Chase. I help aspiring entrepreneurs and makers turn their ideas into digital products and apps.
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.