孤儿进程与僵尸进程

进程退出

关于进程退出有两个函数

exit和 _exit:其主要差别是在于是否直接退出。

其流程主要区别如下:

孤儿进程(不存在危害)

  • 父进程运行结束,但子进程还在运行(未运行结束),这样的子进程就称为孤儿进程。
  • 每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init ,而 init 进程会循环地 wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候,init 进程就会代表党和政府出面处理它的一切善后工作。

僵尸进程(有危害)

  1. 每个进程结束之后, 都会释放自己地址空间中的用户区数据。但是子进程的内核区的 PCB 没有办法自己释放掉,需要父进程去释放。
  2. 子进程终止时,父进程因为种种原因无法回收,子进程残留资源(PCB)存放于内核中,变成僵尸(Zombie)进程。
  3. 僵尸进程不能被 kill -9 杀死,这样就会导致一个问题,如果父进程不调用 wait() 或 waitpid()的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵尸进程,将因为没有可用的进程号而导致系统不能产生新的进程,此即为僵尸进程的危害,应当避免。

解决方法:

通过wait() 和 waitpid() 函数。这两个函数功能一样,区别在于,wait() 函数会阻塞,

waitpid() 可以设置不阻塞,waitpid() 还可以指定等待哪个子进程结束。

注意:一次wait或waitpid调用只能清理一个子进程,清理多个子进程应使用循环。

相关推荐
虚伪的空想家14 分钟前
arm架构服务器使用kvm创建虚机报错,romfile “efi-virtio.rom“ is empty
linux·运维·服务器·javascript·arm开发·云原生·kvm
火车头-11027 分钟前
【docker 部署nacos1.4.7】
运维·docker·容器
深藏bIue28 分钟前
linux服务器mysql目录下的binlog文件删除
linux·服务器·mysql
虾..44 分钟前
Linux 进程状态
linux·运维·服务器
测试者家园1 小时前
DevOps 到底改变了测试什么?
运维·自动化测试·软件测试·devops·持续测试·智能化测试·软件测试和开发
扛枪的书生2 小时前
Linux 通用软件包 AppImage 打包详解
linux
只想安静的写会代码2 小时前
网卡信息查询、配置、常见故障排查
linux·服务器·windows
jiayong232 小时前
多子系统架构下的Nginx部署策略与最佳实践
运维·nginx·系统架构
皮糖小王子2 小时前
Docker打开本地镜像
运维·docker·容器
wavemap2 小时前
阿里云38元一年200M轻量云服务器详细评测
服务器·阿里云·云计算·vps·评测·boboforum