Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 错误:IPC通道已断开连接_Node.js - Fatal编程技术网

Node.js 错误:IPC通道已断开连接

Node.js 错误:IPC通道已断开连接,node.js,Node.js,我应该在何处/何时发现此错误 Error: IPC channel is already disconnected 这是在我多次调用.disconnect时使用集群模块从子进程调用的。我知道我不应该叫它两次或更多,但有时我无法控制它。最终如何避免多次拨打此电话?此代码不起作用: try { if (worker.state !== "disconnected" && worker.state !== "dead") { worker.disconnect();

我应该在何处/何时发现此错误

Error: IPC channel is already disconnected
这是在我多次调用.disconnect时使用集群模块从子进程调用的。我知道我不应该叫它两次或更多,但有时我无法控制它。最终如何避免多次拨打此电话?此代码不起作用:

try {
  if (worker.state !== "disconnected" && worker.state !== "dead") {
    worker.disconnect();
  }
} catch (error) {}
编辑:

这是此错误的堆栈跟踪:

events.js:71
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: IPC channel is already disconnected
    at process.target.disconnect (child_process.js:392:26)
    at ProgressTracker.callback (cluster.js:437:20)
    at ProgressTracker.check (cluster.js:94:32)
    at Object.Worker.disconnect [as 44:2] (cluster.js:445:16)
    at handleResponse (cluster.js:149:41)
    at respond (cluster.js:170:5)
    at handleMessage (cluster.js:180:5)
    at process.EventEmitter.emit (events.js:126:20)
    at handleMessage (child_process.js:269:12)
    at Pipe.channel.onread (child_process.js:293:9)

此错误应在辅助文件中处理。例如,使用此代码:

process.on("uncaughtException", function (error) {
  if (error.toString() !== 'Error: IPC channel is already disconnected') {
    process.stderr.write(error.stack);
    process.exit(1);
  }
}); 
从父脚本捕获该脚本的所有尝试均未成功。
我希望这能帮助别人解决这个问题。

这个错误应该在worker文件中处理。例如,使用此代码:

process.on("uncaughtException", function (error) {
  if (error.toString() !== 'Error: IPC channel is already disconnected') {
    process.stderr.write(error.stack);
    process.exit(1);
  }
}); 
从父脚本捕获该脚本的所有尝试均未成功。
我希望这有助于某人处理此问题。

您应该使用worker.shrighter来防止呼叫。断开多次连接:

if (!cluster.worker.suicide) {
    cluster.worker.disconnect();
}
通过调用.kill或.disconnect进行设置,直到它未定义为止


您应该使用worker.sequestion来阻止呼叫。断开多次连接:

if (!cluster.worker.suicide) {
    cluster.worker.disconnect();
}
通过调用.kill或.disconnect进行设置,直到它未定义为止


这是一篇老文章,但我在项目中遇到了这个问题

我发现worker.Shumble api现在已被弃用,请参阅:

现在建议使用worker.exitedAfterDisconnect请参阅:

因此,以基里尔·日尔诺夫为例:

if (!cluster.worker.suicide) {
    cluster.worker.disconnect();
}
将成为:

if (!cluster.worker.exitedAfterDisconnect) {
    cluster.worker.disconnect();
}

exitedAfterDisconnect将是未定义的,直到对辅助进程调用.kill或.disconnect,然后才是真的。

有点老了,但我在项目中遇到了这个问题

我发现worker.Shumble api现在已被弃用,请参阅:

现在建议使用worker.exitedAfterDisconnect请参阅:

因此,以基里尔·日尔诺夫为例:

if (!cluster.worker.suicide) {
    cluster.worker.disconnect();
}
将成为:

if (!cluster.worker.exitedAfterDisconnect) {
    cluster.worker.disconnect();
}
exitedAfterDisconnect将是未定义的,直到对辅助进程调用.kill或.disconnect,然后它将为true。

在NodeJS 7.10和NodeJS 8.0中测试

如何检查:

如果child.connected{ 断开连接; } 未断开连接的子进程:

子进程{ 域: 领域{ 域:空, _事件:{error:[函数:debugDomainError]}, _事件提示:1, _maxListeners:未定义, 成员:[]}, _事件:{internalMessage:[函数]}, _事件提示:1, _maxListeners:未定义, _关闭所需时间:2, _关闭日期:0, 是的, 信号代码:空, exitCode:null, 被杀:错, 生成文件:'/usr/bin/nodejs', _句柄:进程{owner:[Circular],onexit:[Function],pid:25424}, spawnargs:['/usr/bin/nodejs','./dist/child.js'], pid:25424, stdin:null, stdout:null, stderr:null, stdio:[null,null,null,null], 频道: 烟斗{ 字节:0, _外部流:{}, fd:14, writeQueueSize:0, 缓冲:false, onread:[函数], 套接字:{got:{},send:{}, _通道:[Getter/Setter], _handleQueue:null, _pendingHandle:null, 发送:[函数], _发送:[函数], 断开连接:[功能], _断开连接:[函数]} 已断开连接的子进程:

子进程{ 域: 领域{ 域:空, _事件:{error:[函数:debugDomainError]}, _事件提示:1, _maxListeners:未定义, 成员:[]}, _事件:{internalMessage:[函数]}, _事件提示:1, _maxListeners:未定义, _关闭所需时间:2, _关闭日期:1, 联系:错, 信号代码:空, 出口代码:0, 被杀:错, 生成文件:'/usr/bin/nodejs', _句柄:null, spawnargs:['/usr/bin/nodejs','./dist/child.js'], pid:25424, stdin:null, stdout:null, stderr:null, stdio:[null,null,null,null], 频道:空, _通道:[Getter/Setter], _handleQueue:null, _pendingHandle:null, 发送:[函数], _发送:[函数], 断开连接:[功能], _断开连接:[函数]} 在NodeJS 7.10和NodeJS 8.0中测试

如何检查:

如果child.connected{ 断开连接; } 未断开连接的子进程:

子进程{ 域: 领域{ 域:空, _事件:{error:[函数:debugDomainError]}, _事件提示:1, _maxListeners:未定义, 成员:[]}, _事件:{internalMessage:[函数]}, _事件提示:1, _maxListeners:未定义, _关闭所需时间:2, _关闭日期:0, 是的, 信号代码:空, exitCode:null, 被杀:错, 生成文件:'/usr/bin/nodejs', _句柄:进程{owner:[Circular],onexit:[Function],pid:25424}, spawnargs:['/usr/bin/nodejs','./dist/child.js'], pid:25424, stdin:null, stdout:null, stderr:null, stdio:[null,null,null,null], 频道: 烟斗{ 字节:0, _外部流:{}, fd:14, writeQueueSize:0, 缓冲:false, onread:[函数], 套接字:{got:{},send:{}, _通道:[Getter/Setter], _handleQueue:null, _pendingHandle:null, 发送:[函数], _发送:[函数], 断开连接:[功能], _断开连接:[函数]} 已断开连接的子进程:

子进程{ 域: 领域{ 域:空, _事件:{error:[函数:debugDomainError]}, _事件提示:1, _maxListeners:未定义, 成员:[]}, _事件:{internalMessage:[函数]}, _事件提示:1, _maxListeners:未定义, _关闭所需时间:2, _关闭日期:1, 联系:错, 信号代码:空, 出口代码:0, 被杀:错, 生成文件:'/usr/bin/nodejs', _句柄:null, spawnargs:['/usr/bin/nodejs','./dist/child.js'], pid:25424, stdin:null, stdout:null, stderr:null, stdio:[null,null,null,null], 频道:空, _通道:[Getter/Setter], _handleQueue:null, _pendingHandle:null, 发送:[函数], _发送:[函数], 断开连接:[功能], _断开连接:[函数]}
域已弃用。域已弃用。