节点子进程,在process.send上关闭通道

时间:2014-06-08 20:23:40

标签: javascript node.js child-process

在我的worker文件中,我监听数据回调。 someLib是node-serialport。

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.

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

2 个答案:

答案 0 :(得分:6)

问题是当父母被杀时,分叉的子进程没有正确关闭。这导致多个重影过程导致通道关闭错误。

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

答案 1 :(得分:0)

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