Skip to content

Instantly share code, notes, and snippets.

@timoxley
Last active April 19, 2024 11:51
Show Gist options
  • Star 44 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save timoxley/1689041 to your computer and use it in GitHub Desktop.
Save timoxley/1689041 to your computer and use it in GitHub Desktop.
check if a port is being used with nodejs
var isPortTaken = function(port, fn) {
var net = require('net')
var tester = net.createServer()
.once('error', function (err) {
if (err.code != 'EADDRINUSE') return fn(err)
fn(null, true)
})
.once('listening', function() {
tester.once('close', function() { fn(null, false) })
.close()
})
.listen(port)
}
@tysonrm
Copy link

tysonrm commented Feb 20, 2024

Test without producing an error
on mac and most unix/linux

const { spawnSync } = require('child_process')

function checkPort(port) {
  const output = spawnSync(
    `lsof -i tcp:${port} | awk '{print $2}' |grep --invert PID`,
    { shell: true }
  )
  if (output.error) {
    console.error(output.error)
    return
  }
  const pid = Buffer.from(output.stdout.buffer).toString().split('\n')[0]
  console.log({ pid })
  return pid
}

const pid = checkPort(443)) 
if (pid) {
  console.log(`server is running, process id  ${pid}`)
}

@ffd8
Copy link

ffd8 commented Feb 22, 2024

const pid = checkPort(443)) 

@tysonrm – nice technique! FYI, there's an extra ) when making the checkPort() example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment