diff options
-rw-r--r-- | lib/internal/process/per_thread.js | 5 | ||||
-rw-r--r-- | test/parallel/test-process-really-exit.js | 17 |
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'); +} |