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:
Benjamin Coe 2019-01-23 09:44:43 -08:00
parent a8d763adf2
commit a6286e64c5
No known key found for this signature in database
GPG Key ID: 7668A2653280F496
2 changed files with 21 additions and 1 deletions

View File

@ -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) {

View 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');
}