如何解决孤儿进程的出现
题目来源:网易互娱(操作系统)
答案:
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
解决方案
孤儿进程结束后会被 init 进程善后,并没有危害,而僵尸进程则会一直占着进程号,操作系统的进程数量有限则会受影响。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
僵尸进程解决方案
进程等待—wait函数和waitpid函数
wait函数
创建一个子进程,子进程正常逻辑,父进程调用wait函数来进行等待,当子进程退出的时候,由于父进程在等待,所以子进程就不会变成僵尸进程
父进程一开始调用wait函数,就会阻塞在wait函数中,等待子进程
直到子进程退出,wait函数调用才返回,父进程接着执行wait函数之后的代码