节点 child_process 执行自身

Node child_process execute itself

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

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);
})

它将运行 编写脚本并显示输出。

我似乎没有理解关于子进程的关键部分,我该如何正确处理这个问题?

根据Docs

callback <Function> called with the output when process terminates

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

看看 child_process.spawn or child_process.fork - 它们应该可以满足您的需求。

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

The child_process.fork() method is a special case of child_process.spawn() used specifically to spawn new Node.js processes. Like child_process.spawn(), a ChildProcess object is returned. The returned ChildProcess will have an additional communication channel built-in that allows messages to be passed back and forth between the parent and child. See child.send() for details.