linux学习笔记(12)僵死进程

进程地址空间

僵死进程

子进程先于父进程结束,父进程没有(wait)获取子进程的退出码
父进程先结束,子进程变成孤儿进程,然后系统会为子进程重新指派父进程(init pid=1)
关键特征:
  • 进程已经死亡,不再运行
  • 但在进程表中仍占有一个条目(PID未被释放)
  • 保留着退出状态码、CPU时间统计等信息
  • 无法被kill -9杀死(因为已经死了)
观察僵死进程:
如果没有僵死状态,子进程退出后立即被完全清理,父进程就无法知道:
  • 子进程是正常退出还是被信号杀死?
  • 退出码是多少?
  • 运行了多长时间?

僵死进程的危害

主要问题:
  1. 占用系统资源: 每个僵死进程占用一个PID号
  2. PID耗尽攻击: 如果大量产生僵死进程不回收,可能导致系统无法创建新进程
  3. 资源泄漏: 进程表项、内存描述符等资源无法释放

如何避免和清理僵死进程?

如何查找和手动清理僵死进程?

# 查找僵死进程
ps aux | awk '$8=="Z" {print $2, $11}'

# 杀死父进程(会自动回收所有子进程)
kill -9 <parent_pid>

为什么kill -9杀不死僵死进程?

因为僵死进程已经死了,它不响应任何信号。只能通过杀死其父进程来回收。

在什么场景下容易产生僵死进程?

服务器程序中频繁创建短命子进程
父进程忘记调用wait/waitpid
信号处理设置不当(如忽略SIGCHLD)
wait = 等待子进程结束 + 回收僵死进程(sys/wait.h)
wait确实就是回收进程,但如果没有僵死进程可回收时,它会先等待。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值