Another snippet post! Snippets are my attempt to write short posts about common problems or short concepts that I run into during development.
This happens from time to time to me, particularly with runaway Node processes. You try to start your app on localhost, but get a message like: EADDRINUSE, Address already in use
or maybe listen tcp 127.0.0.1:3000: bind: address already in use
. You don't have anything running on the port that you can find to stop, though, so what do you do?
lsof
to the Rescue
lsof
is a Unix command that means “list open files,” which means it lists files that are opened by processes running on your system. By default running lsof
will display a huge amount of info, because at any given time there are a ton of processes running on your machine.
To narrow down the specific process that is running on a given port, use the -i
flag. For example, to list the process running on port 3000, run: lsof -i :3000
. Note the colon in there!
This will print some columnar data for you. It might look something like this:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 5750 hanna 28u IPv4 0x66edcffc34e07861 0t0 TCP *:hbci (LISTEN)
The important info here is PID
, which stands for Process Identifier.
kill
the Process!
Now, you can use this PID to kill the runaway process with the kill
command! I always pass the -9
flag to kill
. This specifically passes a KILL
signal to that process, which will effectively kill frozen or unresponsive processes.
To follow along with the example above, this is how I would kill that pesky Node process I found with lsof
above:
kill -9 5750