process: fix call process.reallyExit, vs., binding
Some user-land modules, e.g., nyc, mocha, currently rely on patching process.reallyExit. PR-URL: https://github.com/nodejs/node/pull/25655 Fixes: https://github.com/nodejs/node/issues/25650 Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
a8d763adf2
commit
a6286e64c5
@ -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) {
|
||||
|
17
test/parallel/test-process-really-exit.js
Normal file
17
test/parallel/test-process-really-exit.js
Normal file
@ -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');
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user