diff options
author | cjihrig <cjihrig@gmail.com> | 2018-01-26 14:16:20 -0500 |
---|---|---|
committer | cjihrig <cjihrig@gmail.com> | 2018-01-29 10:24:45 -0500 |
commit | e0864e50ecf917cbfa98d443e6f122425d6447cf (patch) | |
tree | 37b38c48a4c91d5f9eed9675c705125e3d5dff77 | |
parent | 0778f79cb37526c3f4f8bff525fc4d4ca9b86e78 (diff) | |
download | android-node-v8-e0864e50ecf917cbfa98d443e6f122425d6447cf.tar.gz android-node-v8-e0864e50ecf917cbfa98d443e6f122425d6447cf.tar.bz2 android-node-v8-e0864e50ecf917cbfa98d443e6f122425d6447cf.zip |
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>
-rw-r--r-- | doc/api/cluster.md | 2 | ||||
-rw-r--r-- | lib/internal/cluster/master.js | 1 | ||||
-rw-r--r-- | test/parallel/test-cluster-cwd.js | 22 |
3 files changed, 25 insertions, 0 deletions
diff --git a/doc/api/cluster.md b/doc/api/cluster.md index 6ef451cb9a..1817ac8202 100644 --- a/doc/api/cluster.md +++ b/doc/api/cluster.md @@ -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 diff --git a/lib/internal/cluster/master.js b/lib/internal/cluster/master.js index 280955549a..570cf7bc6f 100644 --- a/lib/internal/cluster/master.js +++ b/lib/internal/cluster/master.js @@ -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, diff --git a/test/parallel/test-cluster-cwd.js b/test/parallel/test-cluster-cwd.js new file mode 100644 index 0000000000..ce3fdca51e --- /dev/null +++ b/test/parallel/test-cluster-cwd.js @@ -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(); +} |