节点.js:进程生成挂起

Node.js: Process Spawn Hang

提问人:Sterling Butters 提问时间:10/18/2018 最后编辑:Sterling Butters 更新时间:10/18/2018 访问量:2631

问:

我正在尝试运行以下shell命令:

netstat -nat | grep 3000

并最终

netstat -nat | grep 3000 | grep ESTABLISHED

从 Node .js获取连接到特定端口的 IP 地址,使用如下图所示 https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_optionsspawn

const netStat = spawn('netstat', ['-nat']);
const grep = spawn('grep', ['3000']);

netStat.stdout.on('data', (data) => {
  grep.stdin.write(data);
});

console.log('Determining public ip\'s connected to port 3000');
grep.stdout.on('data', function(data){
  console.log(data.toString());
});

但结果只是悬而未决,我做错了什么吗? 提前感谢您的帮助!

节点 .js shell 进程 stdout 生成

评论

1赞 Cody G 10/18/2018
处理所有事件,可能缺少什么?stderr
0赞 Sterling Butters 10/18/2018
为什么,你必须处理所有事件?-成功了
0赞 Cody G 10/18/2018
不是说你必须这样做,对不起,---它更像是关于“希望这会告诉你为什么它失败”的声明,但我很高兴它修复了你的错误LOL --- 您运行的是哪个节点版本?
0赞 Sterling Butters 10/18/2018
哈哈,好吧,不管我怎么说,我就离开它了
0赞 Cody G 10/18/2018
我的猜测是它无法打开任何东西以将输出管道传输到 stderr,所以它只是永远继续尝试

答:

2赞 Cody G 10/18/2018 #1

由于您不从管道读取数据,也不忽略使用选项,因此该过程将挂起,因为在从管道读取之前管道仍处于打开状态。stderrstdio

一个类似但不相关的问题是为什么我通过 spawn() 创建的 Node 子进程挂起?