linux操作系统-僵尸进程与孤儿进程
僵尸进程
- 【linux操作系统-僵尸进程与孤儿进程】概念:
一个父进程利用fork创建子进程,如果子进程退出,而父进程没有利用wait或者waitpid来获取子进程状态信息,那么子进程的状态描述符依然保存到系统中,从而占用进程号,而系统中的进程号是有限的,如果产生大量僵尸进程,可能导致系统无法产生新进程,应当避免。
- 避免措施:
- 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程被挂起
- 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后,父进程会收到该信号,可以在handler中调用wait回收
- 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD,SIG_IGN)通知内核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收,并不再给父进程发送信号。
- fork两次,父进程fork一个子进程,然后继续工作,子进程fork一个孙进程后退出,那么孙进程被init接管,孙进程结束后,init会回收,不过子进程的回收还要自己做。
- 解决措施
kill僵尸进程的父进程,由init进程接管僵尸进程,init进程始终会负责清理僵尸进程
- 一个父进程退出,而它的一个或几个子进程依然在运行,那么这些子进程会变成孤儿进程,孤儿进程将被init进程(进程号为1)所收养,原因是每个进程结束的时候,系统都会扫描当前系统中所运行的所有进程,看有没有哪个进程是刚刚结束的进程的子进程,如果是的话,就由init接管它,并由init进程对它们完成状态收集的工作。init进程会循环地wait()它的子进程,这样当一个孤儿进程结束其生命周期后,init进程就会处理它的善后工作,因此孤儿进程不会有什么危害。
推荐阅读
- Linux下面如何查看tomcat已经使用多少线程
- Beego打包部署到Linux
- 操作系统|[译]从内部了解现代浏览器(1)
- Linux|109 个实用 shell 脚本
- linux定时任务contab
- 芯灵思SinlinxA33开发板Linux内核定时器编程
- day16-Linux|day16-Linux 软件管理
- 如何在阿里云linux上部署java项目
- mac|mac 链接linux服务器 如何在Mac上连接服务器
- Linux|Linux 服务器nginx相关命令