DEV Community

Cover image for How to Kill a Process Running on a Port
Johnny Simpson
Johnny Simpson

Posted on • Originally published at fjolt.com

How to Kill a Process Running on a Port

It is common in Node.js and other languages to run a script on a certain port. Since ports can come in and out of use, it's also common to get the following error:

    Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (net.js:1318:16)
    at listenInCluster (net.js:1366:12)
    at Server.listen (net.js:1452:7)
    at Function.listen (/application.js:618:24)
    at file:///httpdocs/index.js:149:5
    Emitted 'error' event on Server instance at:
        at emitErrorNT (net.js:1345:8)
        at processTicksAndRejections (internal/process/task_queues.js:80:21) {
        code: 'EADDRINUSE',
        errno: -98,
        syscall: 'listen',
        address: '::',
        port: 3000
    }
Enter fullscreen mode Exit fullscreen mode

This error says that there is currenlty something running on port 3000, so we can't use it. Fortunately this is quite easy to fix.

Linux and Mac

To solve this issue on linux or on a mac, you first want to find out the process ID or PID currently running on the port (in our case :3000). To do that, you can use lsof. If you want a way to remember lsof, it is that it means 'list of'.

    lsof -i :3000
Enter fullscreen mode Exit fullscreen mode

This will return processes running on port :3000. The next step is to kill the processes on that port. Note the PID, and then run the following command, replacing [PID] with your PID:

    kill -15 [PID]
Enter fullscreen mode Exit fullscreen mode

Why -15? -15 refers to the message your computer will send. You should try -15 the first time, as this will lead to an orderly shutdown of port 3000. If that doesn't work, then try:

    kill -9 [PID]
Enter fullscreen mode Exit fullscreen mode

Now there will be nothing running on port :3000. This will also work for any other port you're having issues with, i.e. :8080, :1337, or any other number.

For Windows Users

For any windows users out there, it is slightly different, but I have put this here as it may also prove useful. First off, find what is running at the port you are looking for (i.e. 3000). The PID can be found at the end of the line when you run this process:

    netstat -ano | findstr :3000
Enter fullscreen mode Exit fullscreen mode

Then, similar to linux and mac, kill what is on that port, replacing PID with the PID for that process from the statement above.


    taskkill /PID PID /F

Top comments (11)

Collapse
 
m1randasandro profile image
Sandro Miranda

neat. that happens more often than we'd wanted to.
btw, i usually do sudo kill -9 $(sudo lsof -t -i:3000) to get the job done real quick.

Collapse
 
smpnjn profile image
Johnny Simpson

Nice, that's a pretty simple way of doing it

Collapse
 
Sloan, the sloth mascot
Comment deleted
Collapse
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

Sounds a bit pointless, given how linux already has the right tools for the job 🤔

Collapse
 
smpnjn profile image
Johnny Simpson

yeah I don't think you need a separate package for it either really. I guess it's just a wrapper for the basic linux commands.

Thread Thread
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

It's a lot of code for what could essentially be a one-liner though 😐

Collapse
 
Sloan, the sloth mascot
Comment deleted
 
darkwiiplayer profile image
𒎏Wii 🏳️‍⚧️

Unless many of your servers are running windows, it doesn't just sound pointless, but actually is.

Collapse
 
decker67 profile image
decker

Good tip.

Collapse
 
hilleer profile image
Daniel Hillmann

Nice. I wrote a small CLI tool to help you also do this. Cross platform ofc.

npmjs.com/package/kill-port-process

Collapse
 
jashandeep31 profile image
Jashandeep Singh

Thanks