【问题标题】:Node.js: Process Spawn HangNode.js:进程生成挂起
【发布时间】:2019-03-22 12:37:47
【问题描述】:

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

netstat -nat | grep 3000

最终

netstat -nat | grep 3000 | grep ESTABLISHED

根据https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options从Node.js获取使用spawn连接到特定端口的ip地址可见下图:

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());
});

但结果只是挂起,我做错了什么吗? 提前感谢您的帮助!

【问题讨论】:

  • 处理所有事件,可能缺少来自stderr的东西?
  • 为什么,你必须处理所有的事件? - 成功了
  • 不是说你必须,抱歉 --- 它更多的是关于“希望这会告诉你它为什么失败”的声明,但我很高兴它修复了你的错误 LOL --- 你正在运行什么节点版本?
  • 大声笑,不管怎样,我想我会留下它
  • 我的猜测是它无法打开任何东西来管道输出到 stderr,所以它只是继续尝试永远

标签: node.js shell process stdout spawn


【解决方案1】:

由于您没有从stderr 管道中读取数据,也没有使用选项忽略stdio,因此进程挂起,因为管道在读取之前仍处于打开状态。

Why is my Node child process that I created via spawn() hanging? 是一个类似但不相关的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 2014-03-16
    • 2012-09-26
    • 2020-05-22
    • 2011-03-31
    • 1970-01-01
    • 2017-11-10
    • 2020-09-03
    相关资源
    最近更新 更多