我尝试通过node.js脚本(父级)创建一个子进程,这种方式不会对父级和子级数据流产生干扰。父进程仅在子进程启动并能够终止时才具有子进程ID。 child_process.exec
满足了我的需要,但不幸的是,它缓冲了孩子的输出,因此当缓冲区装满后,孩子就会崩溃。有没有消除缓冲的方法?子进程本质上是无限的(数据流)。还是有其他方法可以实施这些控制措施?
代码示例(仅用于演示):
const { exec } = require('child_process');
const keypress = require('keypress');
keypress(process.stdin);
var c1;
process.stdin.on('keypress', (letter, key) => {
if (key && key.name == 'a') {
c1.kill();
} else if (key && key.name == 'b') {
c1 = exec('ffplay -i udp://localhost:4000', (err, stdout, stderr) => {
if (err) {
console.error(`error: ${err}`);
}
});
}
});
我尝试过spawn
,但是有孩子-父母的干扰甚至更严重
答案 0 :(得分:1)
如果您改用child_process.spawn
,则应该可以使用stdio
的选项来调用它:
spawn(cmd, [], { stdio: 'ignore' });
编辑:
如果您是Promise
的粉丝,那么这是我写来帮助解决问题的实用程序
const quietSpawn = (cmd, args = []) => {
const splitCmd = cmd.split(' ');
if (splitCmd.length > 1) {
[cmd, ...args] = splitCmd;
}
return new Promise((resolve, reject) => {
const proc = spawn(cmd, args, { stdio: 'ignore' });
proc.on('exit', resolve);
proc.on('error', reject);
});
};