Linux进程7.进程等待

01 什么是僵尸进程

僵尸进程就是已经结束了的,但是还没有从进程表中删除的进程。僵尸进程太多会导致进程表里面条目被填满,进而导致系统崩溃。

在进程的状态中,僵尸进程几乎放弃了所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置。
他需要父进程来为它收尸,如果父进程没有安装SIGCHLD信号处理函数,调用wait()或者waitpid()等待子进程结束,又没有显式忽略该信号,那么它就一直保持僵尸状态。如果这时父进程结束了,那么init进程会自动接手这个子进程,为它收尸。

  • 可以用top命令查看僵尸进程
    在这里插入图片描述
  • 继而使用ps -aux |grep Z命令来查看僵尸进程,僵尸进程的状态显示的是Z在这里插入图片描述
  • 杀死僵尸进程
    kill命令对僵尸进程不起作用,只能通过杀死僵尸进程的父进程来杀死它

ps - ef | grep 僵尸进程的PID
kill -9 僵尸进程的父进程

02 如何避免僵尸进程

  • wait函数:用于等待子进程中断或结束

wait()会暂时停止目前进程的执行,直到有信号来到或子进程结束为止。

  • waitpid函数:用于等待子进程的中断或结束

waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程结束为止。

03 进程退出

在Linux中进程退出分为正常退出和异常退出;

  • 正常退出:
    1)在main函数中执行return;
    2)调用exit函数;
    3)调用_exit函数;
  • 异常退出
    1)调用abort函数;
    2)进程收到某个信号,而该信号使程序终止;

不管哪种退出方式,系统最终都会执行内核中的同一代码,这段代码用来关闭进程所用已打开的文件描述符,释放它所占的内存和其它资源。

  • exit和return的区别:

exit是一个函数,有参数,exit执行完后把控制权交给系统;
return是函数执行完后的返回,return执行完后将控制权交给系统。

  • exit和abort的区别:

exit是正常终止进程;
abort是异常终止程序。

  • exit和_exit函数

exit和_exit函数都是用来终止进程的,当程序执行到exit和_exit时,系统无条件地停下所有的操作,清除包括PCB在内的各种数据结构,并终止本进程的运行。
exit在头文件stdlib.h中声明,而_exit在头文件unistd.h中声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值