节点 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.
我正在尝试让脚本在完成后再次自行执行,这次使用不同的参数。
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.