什么需要(“child_process”)实际上做?
当我们打电话给:
var p = require(child_process);
我们是否已经创build了一个subprocess ? (如果没有,这里是什么?)
为了进一步解释我的困惑,在我拾起的代码库中,我看到:
var childProcess1 = require("child_process"); var _retrieveChild = childProcess1.fork( __dirname + '/backgroundProcesses/DadProcess', { execArgv: ['--debug=5859'] } );
我在问自己,是从一个subprocess创build另一个进程呢,还是说childProcess1
只是一个非常错误的名字?
需要模块有时可以初始化模块,所以不要因为不知道而感到不快。 他们都是不同的。 但是, child_process
不会简单地按照您的要求来创build一个stream程。 您必须调用fork()
或spawn()
(或exec()
)来实际创build新进程(和PID)。
如果你看看文档,你可以看到他们有时会使用这个语法:
var spawn = require('child_process').spawn; // ... spawn('ps', ['ax']);
它基本上抓住了模块的API,然后spawn
方法closures,并将其别名为本地variables供稍后在代码中使用。
编辑
为了便于理解,通常在Node模块内部,模块决定要“输出”什么。 不pipe它输出什么,都会从require(...)
调用中返回。 例如,如果我们有这个模块:
// foo.js module.exports = function() { return "bar"; };
然后require("foo")
会给我们一个函数(但它不会被调用):
var mymodule = require("foo"); var result = mymodule(); // <-- this calls the function returned via module.exports console.log(result); // "bar"
child_process
模块充当spawn
, exec
, execFile
和fork
函数的命名空间。 您可以调用require("child_process")
来引用该模块,然后调用其中一个成员函数来创build一个新进程。
每个函数的返回值都是一个ChildProcess
对象 ,它代表了派生进程,并且具有诸如stdin
, stdout
和pid
类的成员。
如果您不确定它的作用,请检查它返回的结果。
var childProcess = require('child_process') console.log(childProcess);
你可能会得到这样的(取决于Node.js版本):
{ ChildProcess: { [Function: ChildProcess] super_: { [Function: EventEmitter] EventEmitter: [Circular], usingDomains: false, defaultMaxListeners: 10, init: [Function], listenerCount: [Function] } }, fork: [Function], _forkChild: [Function], exec: [Function], execFile: [Function], spawn: [Function], spawnSync: [Function: spawnSync], execFileSync: [Function: execFileSync], execSync: [Function: execSync] }
ChildProcess的最新节点版本文档 。