You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未调用waitpid时僵尸进程为何会在htop中自动消失?

现象原因说明

1. 僵尸进程的生成逻辑

你提供的两段C代码运行后都会产生持续存在的僵尸子进程:

  • 第一段代码没有处理SIGCHLD信号,父进程默认忽略该信号,子进程退出后会保留PCB资源等待父进程回收,进入僵尸状态。
  • 第二段代码仅设置了空的SIGCHLD信号回调,没有在回调中调用wait()/waitpid()回收子进程资源,因此子进程依然会进入僵尸状态,只有将信号处理函数设置为SIG_IGN或者在回调中完成回收逻辑,才会避免僵尸进程生成。

2. htop看不到僵尸进程的核心原因

这不是htop的bug,属于默认配置导致的显示差异,常见原因如下:

  • 部分Linux发行版的htop默认开启了隐藏僵尸进程的选项:你可以按F2进入htop设置界面,选择「Display options」,检查是否勾选了Hide zombie processes,取消该勾选后就能看到所有僵尸进程。
  • htop默认按CPU使用率降序排序:僵尸进程不占用任何CPU资源,若系统运行进程较多,僵尸进程会被排序到列表底部,未滚动到对应位置就会误以为进程消失。你可以按F5切换为树状视图,直接找到父进程展开,就能看到挂载在其下的僵尸子进程。
  • 你也可以直接在htop界面按z键,开启僵尸进程高亮功能,存在的僵尸进程会被特殊颜色标记,可快速定位。

3. top能正常显示的原因

top默认没有隐藏僵尸进程的配置,且会在统计行明确标注僵尸进程总数,列表也不会默认过滤Z状态的进程,因此可以正常看到对应的僵尸进程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:39:03