summaryrefslogtreecommitdiff
path: root/node_modules/foreground-child/dist/mjs/watchdog.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/foreground-child/dist/mjs/watchdog.js')
-rw-r--r--node_modules/foreground-child/dist/mjs/watchdog.js39
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