1.僵尸进程与孤儿进程
僵尸进程:子进程执行完毕,父进程没有对其资源进行回收从而使子进程PCB遗留在内存,从而产生僵尸进程。僵尸进程积累过多会导致无法创建新的进程
孤儿进程:指子进程还在运行中,父进程已经退出,那么该进程会被守护进程init收养,由守护进程来回收其资源
2.如何预防僵尸进程
1.父进程调用wait/waitpid函数等待子进程退出
2.两次fork方法,就是让孙子进程去执行子进程的任务;父进程fork出子进程,然后等待子进程退出,子进程再fork出孙子进程然后退出,此时孙子进程会成为孤儿进程被收养由内核来回收资源。
3.忽略SIGCHLD信号
通过调用signal信号可以告诉内核对子进程的结束不关心,有内核回收;忽略子进程执行完毕回收资源的信号,表示不关心子进程的退出,由操作系统来回收资源。
4.注册信号处理函数
父进程注册信号处理函数,在信号处理函数中调用wait/waitpid;适用于父进程很忙的状态下,不能一直访问子进程的状态