diff options
Diffstat (limited to 'node_modules/foreground-child/dist/mjs/watchdog.js')
-rw-r--r-- | node_modules/foreground-child/dist/mjs/watchdog.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/node_modules/foreground-child/dist/mjs/watchdog.js b/node_modules/foreground-child/dist/mjs/watchdog.js new file mode 100644 index 0000000..3b897a6 --- /dev/null +++ b/node_modules/foreground-child/dist/mjs/watchdog.js @@ -0,0 +1,39 @@ +// this spawns a child process that listens for SIGHUP when the +// parent process exits, and after 200ms, sends a SIGKILL to the +// child, in case it did not terminate. +import { spawn } from 'child_process'; +const watchdogCode = String.raw ` +const pid = parseInt(process.argv[1], 10) +process.title = 'node (foreground-child watchdog pid=' + pid + ')' +if (!isNaN(pid)) { + let barked = false + // keepalive + const interval = setInterval(() => {}, 60000) + const bark = () => { + clearInterval(interval) + if (barked) return + barked = true + process.removeListener('SIGHUP', bark) + setTimeout(() => { + try { + process.kill(pid, 'SIGKILL') + setTimeout(() => process.exit(), 200) + } catch (_) {} + }, 500) + }) + process.on('SIGHUP', bark) +} +`; +export const watchdog = (child) => { + let dogExited = false; + const dog = spawn(process.execPath, ['-e', watchdogCode, String(child.pid)], { + stdio: 'ignore', + }); + dog.on('exit', () => (dogExited = true)); + child.on('exit', () => { + if (!dogExited) + dog.kill('SIGTERM'); + }); + return dog; +}; +//# sourceMappingURL=watchdog.js.map
\ No newline at end of file |