Node.js 需要(“子进程”)实际做什么?

Node.js 需要(“子进程”)实际做什么?,node.js,child-process,Node.js,Child Process,当我们打电话时: var p = require(child_process); 我们已经在创建子进程了吗?(如果不是,这里的p是什么?) 为了进一步解释我的困惑,在我拿起的一个代码库中,我看到: var childProcess1 = require("child_process"); var _retrieveChild = childProcess1.fork( __dirname + '/backgroundProcesses/DadProcess',

当我们打电话时:

var p = require(child_process);
我们已经在创建子进程了吗?(如果不是,这里的
p
是什么?)

为了进一步解释我的困惑,在我拿起的一个代码库中,我看到:

var childProcess1 = require("child_process");
var  _retrieveChild = childProcess1.fork(
           __dirname + '/backgroundProcesses/DadProcess',
           { execArgv: ['--debug=5859'] }
        );
我在问自己,它是在从一个子进程创建另一个进程,还是
childProcess1
只是一个选择不当的名称?

需要模块有时会初始化模块,所以不知道也不必难过。他们都不一样。但是,
child\u进程
并没有像您所做的那样简单地通过要求模块来创建一个进程。您必须调用or(或
exec()
)来实际创建新进程(和PID)

如果您查看文档,您会发现有时他们会使用以下语法:

var spawn = require('child_process').spawn;
// ...
spawn('ps', ['ax']);
它基本上获取模块API,然后
从中派生出
方法,并将其别名为局部变量,以便稍后在代码中使用

编辑

为了便于理解,我们在此进行扩展,在节点模块内部,模块决定“导出”什么。无论它导出什么,都是从
require(…)
调用返回的内容。例如,如果我们有这个模块:

// foo.js
module.exports = function() {
    return "bar";
};
然后,
require(“foo”)
将为我们提供一个函数(但它还没有被调用):

var mymodule=require(“foo”);
var result=mymodule();// 充当、、和函数的命名空间。您可以调用
require(“child\u process”)
来引用该模块,然后调用其一个成员函数来创建一个新流程


每个函数的返回值都是a,它表示生成的进程,并包含诸如
stdin
stdout
、和
pid
之类的成员。如果您对它的功能有疑问,请检查它返回的内容

var childProcess = require('child_process')
console.log(childProcess); 
您可能会这样(取决于Node.js版本):


ChildProcess的最新节点版本。

require
解析模块;在这种情况下,
child\u过程
谢谢!然后我不得不说,child_进程是一个糟糕的名称选择。很好的解释,先生。你能给出解决方案如何在我日常使用的API中使用child进程,比如从mongo获取数据或读取上传图像吗?
var childProcess = require('child_process')
console.log(childProcess); 
{ 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] }