summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/internal/process/per_thread.js5
-rw-r--r--test/parallel/test-process-really-exit.js17
2 files changed, 21 insertions, 1 deletions
diff --git a/lib/internal/process/per_thread.js b/lib/internal/process/per_thread.js
index 6d64c636b2..28b9afe1cf 100644
--- a/lib/internal/process/per_thread.js
+++ b/lib/internal/process/per_thread.js
@@ -149,7 +149,10 @@ function wrapProcessMethods(binding) {
process._exiting = true;
process.emit('exit', process.exitCode || 0);
}
- binding.reallyExit(process.exitCode || 0);
+ // FIXME(joyeecheung): This is an undocumented API that gets monkey-patched
+ // in the user land. Either document it, or deprecate it in favor of a
+ // better public alternative.
+ process.reallyExit(process.exitCode || 0);
}
function kill(pid, sig) {
diff --git a/test/parallel/test-process-really-exit.js b/test/parallel/test-process-really-exit.js
new file mode 100644
index 0000000000..c806d6c4aa
--- /dev/null
+++ b/test/parallel/test-process-really-exit.js
@@ -0,0 +1,17 @@
+'use strict';
+require('../common');
+const assert = require('assert');
+
+// ensure that the reallyExit hook is executed.
+// see: https://github.com/nodejs/node/issues/25650
+if (process.argv[2] === 'subprocess') {
+ process.reallyExit = function() {
+ console.info('really exited');
+ };
+ process.exit();
+} else {
+ const { spawnSync } = require('child_process');
+ const out = spawnSync(process.execPath, [__filename, 'subprocess']);
+ const observed = out.output[1].toString('utf8').trim();
+ assert.strictEqual(observed, 'really exited');
+}