DEV Community

loading...
Cover image for Seek & Destroy: Windows Processes by Port

Seek & Destroy: Windows Processes by Port

terabytetiger profile image Tyler V. (he/him) Originally published at terabytetiger.com Updated on ・3 min read

Recently, I've found myself doing a bit with Node.js and deploying to Windows Servers - and working with servers means learning new things about cmd! One of the errors I was receiving when I would terminate and restart my app was that the port I was trying to listen on was already occupied!

[nodemon] starting `node ./app.js`
events.js:292
      throw er; // Unhandled 'error' event
      ^

Error: listen EADDRINUSE: address already in use :::8080
    at Server.setupListenHandle [as _listen2] (net.js:1313:16)
    at listenInCluster (net.js:1361:12)
    at Server.listen (net.js:1447:7)
    at Function.listen (C:\Users\user\Desktop\auth-server\node_modules\express\lib\application.js:618:24)
    at Object.<anonymous> (C:\Users\user\Desktop\auth-server\app.js:189:5)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (net.js:1340:8)
    at processTicksAndRejections (internal/process/task_queues.js:84:21) {
  code: 'EADDRINUSE',
  errno: 'EADDRINUSE',
  syscall: 'listen',
  address: '::',
  port: 8080
}
[nodemon] app crashed - waiting for file changes before starting...
Enter fullscreen mode Exit fullscreen mode

I needed a way to terminate the process so I could re-start my node server with the changes I had made. I had a rough idea of what to do from working with bash a while back, but I needed to translate that knowledge into Windows' cmd format.

1 - Find the Process ID (PID)

The first step is to find the Process ID for the process occupying the port I was trying to listen on. For this, we can use netstat -a -o -n to list all active connections.

C:\Users\user> netstat -a -o -n

Active Connections

Proto  Local Address          Foreign Address        State           PID
...
TCP    [::]:8080              [::]:0                 LISTENING       3664
...
Enter fullscreen mode Exit fullscreen mode

In the list that gets spat out, you the line that has a Local Address ending in your port - in my case I was looking for :8080. Take note of the value in the PID column - we'll need that in a minute. NOTE: This value will most likely be different each time you start your program

2 - Confirm that PID is for node.exe

This step is optional, but I like to double check that I'm targeting the correct process before I terminate it.

To get a list of tasks running in cmd we can run tasklist which details everything actively running on your machine.

C:\Users\user> tasklist

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
...
node.exe                      6736 Services                   0      2,080 K
cmd.exe                       3048 Services                   0      2,268 K
node.exe                      3664 Services                   0      6,768 K
...

Enter fullscreen mode Exit fullscreen mode

Here, you can see that I have multiple node.exe programs running, but only one of them has our 3664 PID.

3 - Stop the running process

Now that we know our 3664 PID, we can commence putting an end to our runaway process. The general format is taskkill /f /pid ####, replacing the #### with our PID from above. If you try to run this without the /f flag, you'll probably be prompted to use the /f Force flag by Windows.

C:\Users\user> taskkill /f /pid 3664
SUCCESS: The process with PID 3664 has been terminated.
Enter fullscreen mode Exit fullscreen mode

And now you're set to start your node server again!

Summary

  • Find what Process ID (PID) is occupying your port with netstat -a -o -n
  • (Optional) Confirm this PID is for the expected program with tasklist
  • Terminate the process with taskkill /f /pid #### (replace #### with your PID)

Discussion (0)

pic
Editor guide