mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
child_process: control argv0 for spawned processes
In some cases it useful to control the value of `argv[0]`, c.f. - https://github.com/andrewffff/child_process_with_argv0 - https://github.com/andrep/argv0 This patch adds explicit support for setting the value of `argv[0]` when spawning a process. PR-URL: https://github.com/nodejs/node/pull/7696 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
1 parent
a804db1af7
commit
99f45b2476
3 files changed
+33
-1
No files matched your search
@@ -295,6 +295,8 @@ added: v0.1.90
|
||||
* `options` {Object}
|
||||
* `cwd` {String} Current working directory of the child process
|
||||
* `env` {Object} Environment key-value pairs
|
||||
* `argv0` {String} Explicitly set the value of `argv[0]` sent to the child
|
||||
process. This will be set to `command` if not specified.
|
||||
* `stdio` {Array|String} Child's stdio configuration. (See
|
||||
[`options.stdio`][`stdio`])
|
||||
* `detached` {Boolean} Prepare child to run independently of its parent
|
||||
@@ -397,6 +399,14 @@ child.on('error', (err) => {
|
||||
});
|
||||
```
|
||||
|
||||
*Note: Certain platforms (OS X, Linux) will use the value of `argv[0]` for the
|
||||
process title while others (Windows, SunOS) will use `command`.*
|
||||
|
||||
*Note: Node.js currently overwrites `argv[0]` with `process.execPath` on
|
||||
startup, so `process.argv[0]` in a Node.js child process will not match the
|
||||
`argv0` parameter passed to `spawn` from the parent, retrieve it with the
|
||||
`process.argv0` property instead.*
|
||||
|
||||
#### options.detached
|
||||
<!-- YAML
|
||||
added: v0.7.10
|
||||
|
||||
@@ -351,7 +351,11 @@ function normalizeSpawnArguments(file /*, args, options*/) {
|
||||
}
|
||||
}
|
||||
|
||||
args.unshift(file);
|
||||
if (typeof options.argv0 === 'string') {
|
||||
args.unshift(options.argv0);
|
||||
} else {
|
||||
args.unshift(file);
|
||||
}
|
||||
|
||||
var env = options.env || process.env;
|
||||
var envPairs = [];
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
'use strict';
|
||||
require('../common');
|
||||
const assert = require('assert');
|
||||
const cp = require('child_process');
|
||||
|
||||
// This test spawns itself with an argument to indicate when it is a child to
|
||||
// easily and portably print the value of argv[0]
|
||||
if (process.argv[2] === 'child') {
|
||||
console.log(process.argv0);
|
||||
return;
|
||||
}
|
||||
|
||||
const noArgv0 = cp.spawnSync(process.execPath, [__filename, 'child']);
|
||||
assert.strictEqual(noArgv0.stdout.toString().trim(), process.execPath);
|
||||
|
||||
const withArgv0 = cp.spawnSync(process.execPath, [__filename, 'child'],
|
||||
{argv0: 'withArgv0'});
|
||||
assert.strictEqual(withArgv0.stdout.toString().trim(), 'withArgv0');
|
||||
Reference in new issue
Block a user