1.基本概念
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
2.危害
孤儿进程没有什么危害,孤儿进程结束后,init进程会对其持有资源进行释放和清理工作
僵尸进程会一直占用资源,造成系统资源紧张
3.如何避免
(1)孤儿进程
方法一:父进程收到终止信号SIGTERM时,先保存子进程的信息,然后再退出
方法二:父进程收到终止信号SIGTERM时,通过进程组ID将整个组进程杀掉
(2)僵尸进程
方法一:父进程调用wait或waitpid获取子进程状态信息,子进程退出后,对其进行清理工作
方法二:接收SIGCHILD信号,处理退出的子进程