节点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()。