cluster: add cwd to cluster.settings

This commit allows cluster workers to be created with
configurable working directories.

Fixes: https://github.com/nodejs/node/issues/16388
PR-URL: https://github.com/nodejs/node/pull/18399
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
pull/18399/head
cjihrig 2018-01-26 14:16:20 -05:00
parent 0778f79cb3
commit e0864e50ec
No known key found for this signature in database
GPG Key ID: 7434390BDBE9B9C5
3 changed files with 25 additions and 0 deletions

View File

@ -711,6 +711,8 @@ changes:
* `exec` {string} File path to worker file. **Default:** `process.argv[1]`
* `args` {Array} String arguments passed to worker.
**Default:** `process.argv.slice(2)`
* `cwd` {string} Current working directory of the worker process. **Default:**
`undefined` (inherits from parent process)
* `silent` {boolean} Whether or not to send output to parent's stdio.
**Default:** `false`
* `stdio` {Array} Configures the stdio of forked processes. Because the

View File

@ -126,6 +126,7 @@ function createWorkerProcess(id, env) {
}
return fork(cluster.settings.exec, cluster.settings.args, {
cwd: cluster.settings.cwd,
env: workerEnv,
silent: cluster.settings.silent,
windowsHide: cluster.settings.windowsHide,

View File

@ -0,0 +1,22 @@
'use strict';
const common = require('../common');
const assert = require('assert');
const cluster = require('cluster');
if (cluster.isMaster) {
common.refreshTmpDir();
assert.strictEqual(cluster.settings.cwd, undefined);
cluster.fork().on('message', common.mustCall((msg) => {
assert.strictEqual(msg, process.cwd());
}));
cluster.setupMaster({ cwd: common.tmpDir });
assert.strictEqual(cluster.settings.cwd, common.tmpDir);
cluster.fork().on('message', common.mustCall((msg) => {
assert.strictEqual(msg, common.tmpDir);
}));
} else {
process.send(process.cwd());
process.disconnect();
}