什么需要(“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模块充当spawnexecexecFilefork函数的命名空间。 您可以调用require("child_process")来引用该模块,然后调用其中一个成员函数来创build一个新进程。

每个函数的返回值都是一个ChildProcess对象 ,它代表了派生进程,并且具有诸如stdinstdoutpid类的成员。

如果您不确定它的作用,请检查它返回的结果。

 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的最新节点版本文档 。