npm CLI robot adcbfcec60
deps: upgrade npm to 9.6.7
PR-URL: https://github.com/nodejs/node/pull/48062
Reviewed-By: Luke Karrys <luke@lukekarrys.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
2023-05-19 13:45:02 +00:00

50 lines
1.2 KiB
JavaScript

const runningProcs = new Set()
let handlersInstalled = false
// NOTE: these signals aren't actually forwarded anywhere. they're trapped and
// ignored until all child processes have exited. in our next breaking change
// we should rename this
const forwardedSignals = [
'SIGINT',
'SIGTERM',
]
// no-op, this is so receiving the signal doesn't cause us to exit immediately
// instead, we exit after all children have exited when we re-send the signal
// to ourselves. see the catch handler at the bottom of run-script-pkg.js
// istanbul ignore next - this function does nothing
const handleSignal = () => {}
const setupListeners = () => {
for (const signal of forwardedSignals) {
process.on(signal, handleSignal)
}
handlersInstalled = true
}
const cleanupListeners = () => {
if (runningProcs.size === 0) {
for (const signal of forwardedSignals) {
process.removeListener(signal, handleSignal)
}
handlersInstalled = false
}
}
const add = proc => {
runningProcs.add(proc)
if (!handlersInstalled) {
setupListeners()
}
proc.once('exit', () => {
runningProcs.delete(proc)
cleanupListeners()
})
}
module.exports = {
add,
handleSignal,
forwardedSignals,
}