【问题标题】:Node child process, channel closed on process.send节点子进程,通道在 process.send 上关闭
【发布时间】:2014-06-08 20:23:39
【问题描述】:

在我的工作文件中,我监听数据回调。 someLib 是节点串行端口。

process.on('message', function(msg) {
    someLib.on('data', function(data){
        console.log('some data');
        process.send(data);
    });
});

打印出来

some data
Error: channel closed

但是

process.on('message', function(msg) {
    process.send('foobar');
});

工作正常。这很奇怪,但有时第一个代码示例有效,因此通道关闭错误随机出现。

来自http://nodejs.org/api/child_process.html#child_process_event_error我得到了触发错误的信息

Sending a message to the child process failed for whatever reason.

什么是“无论什么原因”?有什么想法吗?

【问题讨论】:

    标签: javascript node.js child-process


    【解决方案1】:

    问题是当父进程被杀死时,分叉的子进程没有正确关闭。这导致了导致通道关闭错误的多个幽灵进程。

    我迷上了 SIGHUP 并优雅地杀死了他们。现在一切正常。

    【讨论】:

      【解决方案2】:

      您需要指定事件类型,因为使用process.send(data) 您只是发送一个对象。

      【讨论】:

      • 什么类型的?根据nodejs.org/api/… 不需要有类型
      • 是的,但是在您的代码中,您每次收到消息时都会注册一个事件侦听器。我想你想在那里调用一个函数。所以不要像someLib...那样直接调用函数,就像process.send(data)一样。或者,您可以在just below 指定的地方做一些事情。
      • 对不起,你误解了我,someLib.on 被调用一次,我的代码只是一个简短的版本。我编辑了我的问题。
      • 好的,现在说得通了。我猜问题出在someLib 某处。
      • 必须的,想了解一下。
      猜你喜欢
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多