| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 | 
							- // 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)
 
- }
 
- `;
 
- /**
 
-  * Pass in a ChildProcess, and this will spawn a watchdog process that
 
-  * will make sure it exits if the parent does, thus preventing any
 
-  * dangling detached zombie processes.
 
-  *
 
-  * If the child ends before the parent, then the watchdog will terminate.
 
-  */
 
- 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('SIGKILL');
 
-     });
 
-     return dog;
 
- };
 
- //# sourceMappingURL=watchdog.js.map
 
 
  |