stop all instances of node.js server

524,804

Solution 1

Windows Machine:

Need to kill a Node.js server, and you don't have any other Node processes running, you can tell your machine to kill all processes named node.exe. That would look like this:

taskkill /im node.exe

And if the processes still persist, you can force the processes to terminate by adding the /f flag:

taskkill /f /im node.exe

If you need more fine-grained control and need to only kill a server that is running on a specific port, you can use netstat to find the process ID, then send a kill signal to it. So in your case, where the port is 8080, you could run the following:

C:\>netstat -ano | find "LISTENING" | find "8080"

The fifth column of the output is the process ID:

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14828
  TCP    [::]:8080              [::]:0                 LISTENING       14828

You could then kill the process with taskkill /pid 14828. If the process refuses to exit, then just add the /f (force) parameter to the command.


MacOS machine:

The process is almost identical. You could either kill all Node processes running on the machine:

killall node

Or also as alluded to in @jacob-groundwater's answer below using lsof, you can find the PID of a process listening on a port (pass the -i flag and the port to significantly speed this up):

$ lsof -Pi :8080
COMMAND   PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     1073    urname   22u  IPv6  bunchanumbershere      0t0  TCP *:8080 (LISTEN)

The process ID in this case is the number underneath the PID column, which you could then pass to the kill command:

$ kill 1073

If the process refuses to exit, then just use the -9 flag, which is a SIGTERM and cannot be ignored:

$ kill -9 1073

Linux machine:

Again, the process is almost identical. You could either kill all Node processes running on the machine (use -$SIGNAL if SIGKILL is insufficient):

killall node

Or also using netstat, you can find the PID of a process listening on a port:

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

The process ID in this case is the number before the process name in the sixth column, which you could then pass to the kill command:

$ kill 1073

If the process refuses to exit, then just use the -9 flag, which is a SIGTERM and cannot be ignored:

$ kill -9 1073

Solution 2

Works for Linux, OS X

killall node

Solution 3

You can use lsof get the process that has bound to the required port.

Unfortunately the flags seem to be different depending on system, but on Mac OS X you can run

lsof -Pi | grep LISTEN

For example, on my machine I get something like:

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

The second number is the PID and the port they're listening to is on the right before "(LISTEN)". Find the rogue PID and kill -9 $PID to terminate with extreme prejudice.

Solution 4

Windows & GitBash Terminal I needed to use this command inside Windows / Webstorm / GitBash terminal

cmd "/C TASKKILL /IM node.exe /F"

Solution 5

if you want to kill a specific node process , you can go to command line route and type:

ps aux | grep node

to get a list of all node process ids. now you can get your process id(pid), then do:

kill -9 PID

and if you want to kill all node processes then do:

killall -9 node

-9 switch is like end task on windows. it will force the process to end. you can do:

kill -l

to see all switches of kill command and their comments.

Share:
524,804

Related videos on Youtube

Kiran Ambati
Author by

Kiran Ambati

I am Kiran from hyderabad, India. I develop stuff on the internet.I am web developer, open source programmer , blogger. I have worked on a large variety of projects involving simple web sites through to complex enterprise-ready integration and automation. Most Often I code in PHP,CakePHP, wordpress,drupal etc,. and sometimes perl.If you are interested to know more about my work, Check my resume or contact me.

Updated on October 27, 2021

Comments

  • Kiran Ambati
    Kiran Ambati over 2 years

    This is my first time working with Node.js and I ran into this problem:

    I have started a Node server through the plugin of an IDE. Unfortunately, I cannot use the IDE's terminal. So I tried to run the script from the command line.

    This is the problem - I am using the Express module and my app is listening some port (8080). When I start the app from the command line, it throws this error:

    events.js:71
        throw arguments[1]; // Unhandled 'error' event
                       ^
    Error: listen EADDRINUSE
        at errnoException (net.js:770:11)
        at HTTPServer.Server._listen2 (net.js:910:14)
        at listen (net.js:937:10)
        at HTTPServer.Server.listen (net.js:986:5)
        at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
        at Module._compile (module.js:449:26)
        at Object.Module._extensions..js (module.js:467:10)
        at Module.load (module.js:356:32)
        at Function.Module._load (module.js:312:12)
        at Module.runMain (module.js:492:10)
    

    Even though I am not very sure what this error could be I assumed that it's because the app is listening on a port which is already in use. So I did:

    netstat -an
    

    I can see

    TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING
    

    It's because the Node server is already started when I tried to start it from the IDE.

    So I want to know, how can I stop all server instances? Also if you can tell me how to detect what's running on a port and kill it.

    • Kiran Ambati
      Kiran Ambati about 11 years
      Sorry I dint mention that I am on windows environment. Please post commands that are relevant. Thanks
    • Xiuying Lan
      Xiuying Lan over 6 years
      and also you can find the node.js task in your windows taskmanager. find the progress which name is Node.js:Server-side...and open it's detail info,you will find the pid and detail of your nodejs progress
    • unnknown
      unnknown almost 5 years
      This is the one worked for me: superuser.com/questions/1183057/…
  • Kiran Ambati
    Kiran Ambati about 11 years
    sorry , How exactly I can use these commands? process.exit() might be in code? but server is already started. It is likely that it is started with command node app.js but not node-dev app.js. And "node killall" is not working. Am I doing it wrong? Thank you
  • hexacyanide
    hexacyanide about 11 years
    process.exit() in your application causes the NodeJS instance to close. killall node in bash would kill all NodeJS instances running on your machine.
  • Kiran Ambati
    Kiran Ambati about 11 years
    thanks @hexacyanide . I am developing on windows. Does that make killall node an invalid command because I cannot use it from command line.
  • hexacyanide
    hexacyanide about 11 years
    Try taskkill /IM node.exe. It will kill all processes named node.exe.
  • Kiran Ambati
    Kiran Ambati about 11 years
    Hi Jacob , please can you edit answer and add windows version because I am developing on windows. Thank you
  • Jacob Groundwater
    Jacob Groundwater about 11 years
    I have no idea how to do it on Windows, sorry Kiran.
  • Luis
    Luis over 10 years
    I had to use taskkill /F /IM node.exe to make it work, thanks!
  • modulitos
    modulitos almost 10 years
    This is a great answer, especially when there are multiple node servers running on different ports. I can easily distinguish the process ID's running on each port.
  • numerical25
    numerical25 over 8 years
    As much as you guys are anal about duplicates and what not. You should really try to update your answer cause technically, what was given is wrong
  • Rajeev Uppala
    Rajeev Uppala about 5 years
    Easy method but if any other application is running then we have to be more specific.
  • Nico Haase
    Nico Haase almost 5 years
    These commands have already been posted multiple times. It's okay to post them again, but then you should at least add some more explanation to your answer such that others can learn from it
  • Urasquirrel
    Urasquirrel almost 5 years
    These return status code 1 and fail all builds in VSTS. Any way around this?
  • Design by Adrian
    Design by Adrian almost 5 years
    This only works in the terminal view with the node process running, and doesn't guarantee to kill the process either.
  • unnknown
    unnknown almost 5 years
    For the windows solution with -/f I get "There is no running instance of the task"
  • Giorgi Gvimradze
    Giorgi Gvimradze over 4 years
    does not work for me. node: no process found Also when I grep for a node processes which run on the specific port, the process ID has - instead of a number itself.
  • Adim Victor
    Adim Victor over 4 years
    This one did it for me. Thanks
  • Asad
    Asad almost 4 years
    This one did it for me as well. I found it fastest way to kill all node processes on Windows.
  • Danyal Aytekin
    Danyal Aytekin about 3 years
    Thanks Dariusz. For anyone stumbling on this in 2021, it's npm i -g fkill-cli.
  • s.j
    s.j about 3 years
    lsof cmd not recognized.
  • Jarrod McGuire
    Jarrod McGuire about 2 years
    Excellent. For whatever reason a particular app won't close the express server when the terminal is closed, or the batch job is terminated, this was a great help so I didn't need to kill all the other node by guesswork.
  • code
    code about 2 years
    You saved my (computer's) life!! The netstat was very helpful.
  • saleh asadi
    saleh asadi about 2 years
    thanks, that made it