redis - 即使等待,solaris 10 中的僵尸进程
问题描述
我正在努力让 Redis 在 Solaris 10 上运行,并且有一些集成测试失败了。我正在研究的测试是这样的:
- 启动 Redis
- 它分叉并且孩子开始将数据库转储到备份文件(RDB)
- 实际上,在孙子变成僵尸的地方,父母/孩子/孙子的关系正在发生,但我注意到就在我不得不回家前几分钟。
- 一小段时间后,测试脚本将 SIGTERM 发送给孩子
- 孩子捕捉到信号并优雅地关闭
- 父母调用 wait3()
尽管有wait3()
电话,孩子最终还是处于僵尸状态。
当我运行它时,测试大约有 90% 的时间都失败了。一旦它进入失败状态,它就永远不会恢复。我尝试将测试更改为等待更长的时间,尽管它似乎在进程退出后多次调用 wait3() ,但它一直处于该状态,直到父进程被杀死。
不幸的是,直到下周我才能再次处理这个问题,所以我正在家里研究它。我的大部分谷歌搜索都只找到了文档或“为什么进程会变成僵尸?” 键入问题。
这个来自 90 年代中期的 google 群组线程可能会有所帮助,尽管他们主要谈论的是 Solaris / SunOS 的旧版本。
解决方案
我错了。看起来主节点没有看到它的子节点失败所以没有wait
。
推荐阅读
- windows - 当我在 Windows Server 下启动 HAProxy 时,出现以下错误
- android - 撰写分页:ConstraintLayout 中 NavHost 中的 LazyColumn 项方法导致 IllegalStateException:检查失败
- typescript - 无法在打字稿上正确定义函数返回类型
- visual-studio - 为什么我无法安装 Microsoft Visual Studio 安装程序项目?
- python - 用以下出现的 m 次的平均值前向填充列表的 n 个缺失周期 - python
- python - 如何通过 Python 3 中的真实数据点绘制平滑曲线?
- php - 缺少必需的参数
- javascript - ESlint javascript config - 删除数组中第一个对象之前的新行
- swiftui - SwiftUI 3在PageTabView中垂直滚动
- pine-script - 仅显示“无数据”的 Pinescript 简短策略