You need to enable JavaScript to run this app. 同端口重新建立连接触发坏文件描述符句柄报错的排查实践
优惠活动
大模型
产品
解决方案
定价
更多

同端口重新建立连接触发坏文件描述符句柄报错的排查实践

IPC同端口拉起子进程报Bad File Descriptor排查记录

故障场景

  • 主流程核心逻辑:固定在2600端口拉起目标子进程,通过编号为6的连接句柄对接子进程拉取所需数据,完成数据提取后终止当前子进程,随后在同一端口再次启动新的子进程
  • 重连操作报错:尝试通过已有句柄对新进程执行操作时,系统返回错误:
'Cannot write to handle 6. OS reports: Bad File Descriptor
  • 交叉验证:新启动的目标进程运行状态完全正常,手动建立连接可以正常获取数据;查询连接跟踪表发现,第二次启动的子进程对应的关联句柄编号同样为6

初始排查猜想

初步怀疑旧进程退出存在残留:由于关闭句柄的流程是异步发送exit 1消息触发进程退出,可能存在旧进程未被完全终止就发起新连接、实际拿到的句柄仍指向已被终止的旧进程的问题。

排查验证过程

  • 退出流程校验:发送exit 1消息后已完成句柄flush操作,新旧进程可通过进程名明确区分,不存在进程存活混淆的问题
  • 连接状态校验:即使连接提示操作成功,对应句柄也从未被写入.z.W系统连接表,不会在全局连接列表中展示

问题根因

此前使用的.IPC.SCON连接函数并非仅做错误捕获的简单封装:

  • 函数内部维护了按主机:端口(hst:prt)维度索引的缓存句柄表,发起新连接前会先匹配同地址的缓存项,只要存在已缓存的句柄就直接复用,不会发起全新连接
  • 两次启动的子进程运行在完全相同的host:port组合下,函数直接命中缓存复用了指向已失效旧进程的句柄,最终触发坏文件描述符报错。

内容的提问来源于stack exchange,提问作者user10165841

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.04 14:15:04