Find (and kill) process locking port 3000 on Mac – Dev

The best answers to the question “Find (and kill) process locking port 3000 on Mac” in the category Dev.


How do I find (and kill) processes that listen to/use my tcp ports? I’m on mac os x.

Sometimes, after a crash or some bug, my rails app is locking port 3000. I can’t find it using ps -ef…

When doing

rails server

I get

Address already in use – bind(2) (Errno::EADDRINUSE)

2014 update:

To complete some of the answers below: After executing the kill commands, deleting the pid file might be necessary rm ~/mypath/myrailsapp/tmp/pids/



sudo lsof -i :3000


kill -9 <PID>


  1. You can try netstat

     netstat -vanp tcp | grep 3000
  2. For macOS El Capitan and newer (or if your netstat doesn’t support -p), use lsof

     lsof -i tcp:3000 
  3. For Centos 7 use:

     netstat -vanp --tcp | grep 3000


Nothing above worked for me. Anyone else with my experience could try the following (worked for me):


lsof -i :3000 (where 3000 is your current port in use)

then check status of the reported PID :

ps ax | grep <PID>

finally, “begone with it”:

kill -QUIT <PID>


Quick and easiest solution:

kill -9 $(lsof -ti:3000)

For multiple ports:

kill -9 $(lsof -ti:3000,3001)

#3000 is the port to be freed

Kill multiple ports with single line command:

kill -9 $(lsof -ti:3000,3001)

#here multiple ports 3000 and 3001 are the ports to be freed

lsof -ti:3000

If the prot is occupied, thie above command will return something like this: 82500 (Process ID)

lsof -ti:3001


lsof -ti:3001,3000


kill -9 $(lsof -ti:3001,3000)

Terminates both 82499 and 82500 processes in a single command.

For using this in package.json scripts:

"scripts": {
   "start": "kill -9 $(lsof -ti:3000,3001) && npm start"

In terminal you can use:

npm run start