节点child_process自己执行

时间:2017-02-24 18:43:16

标签: node.js child-process

我试图让脚本在完成后再次执行,这次使用不同的参数。

child_process.exec(`node m.js ${newTimestamp} ${status.args[3]}`, (err, stdout, stderr)=>{
  console.log('test');
  if (err) {
     console.log(err);
  }
  console.log(stdout);
  console.log(stderr);
})

但它会卡住并且根本不记录任何内容。甚至不是console.log('test')行。但是,如果我将其更改为其他内容,例如:

child_process.exec(`pwd`, (err, stdout, stderr)=>{
  console.log('test');
  if (err) {
     console.log(err);
  }
  console.log(stdout);
  console.log(stderr);
})

它会运行脚本并显示输出。

似乎我不理解关于子进程的关键部分,我该如何妥善处理?

1 个答案:

答案 0 :(得分:1)

根据Docs

callback <Function> called with the output when process terminates

这意味着node m.js的执行仍在进行中,只有在进程完成时才会调用回调。 这就是为什么使用pwd调用回调的原因 - 它在将工作目录打印到stdout后终止。

查看child_process.spawnchild_process.fork - 他们应该满足您的需求。

看起来像你正在搜索的是:

  

child_process.fork()方法是一个特例   child_process.spawn()专门用于生成新的Node.js   流程。像child_process.spawn()一样,ChildProcess对象是   回。返回的ChildProcess将有一个额外的   内置的通信通道,允许传回消息   父母和孩子之间。有关详细信息,请参阅child.send()。