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

然而它卡住了,根本不logging任何东西。 甚至没有console.log('test')线。 但是,如果我将它改为其他的东西,例如:

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

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

看来我并不理解关于subprocess的关键部分,我该如何正确处理呢?

根据文件 :

 callback <Function> called with the output when process terminates 

这意味着node m.js执行仍在进行中,只有当进程结束时才会调用callback。 这就是为什么你的callback与pwd调用 – 它打印工作目录到stdout后终止。

看看child_process.spawn或child_process.fork – 他们应该满足您的需求。

看起来叉子是你正在寻找的东西:

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