我试图让脚本在完成后再次执行,这次使用不同的参数。
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);
})
它会运行脚本并显示输出。
似乎我不理解关于子进程的关键部分,我该如何妥善处理?
答案 0 :(得分:1)
根据Docs:
callback <Function> called with the output when process terminates
这意味着node m.js
的执行仍在进行中,只有在进程完成时才会调用回调。
这就是为什么使用pwd
调用回调的原因 - 它在将工作目录打印到stdout后终止。
查看child_process.spawn或child_process.fork - 他们应该满足您的需求。
看起来像你正在搜索的是:
child_process.fork()方法是一个特例 child_process.spawn()专门用于生成新的Node.js 流程。像child_process.spawn()一样,ChildProcess对象是 回。返回的ChildProcess将有一个额外的 内置的通信通道,允许传回消息 父母和孩子之间。有关详细信息,请参阅child.send()。