Intern Day89 - Linux下的僵尸进程和孤儿进程
fork函数
-
fork函数调用次数:一次会运行/返回2次,一次是父进程运行的,一次是子进程运行的,谁先运行顺序不一定,由操作系统调度器说了算。
-
fork函数调用返回值:等于0的是子进程,返回值大于0的是父进程。
-
fork函数作用:从已经存在的进程(父进程)中创建一个子进程。
-
fork后执行代码的顺序一定是先子进程后父进程吗?不是,这完全看CPU调度。
注意
UID = 用户ID,PID = 进程ID,PPID = 父进程ID
僵尸进程
概念:简单来说,就是 子进程先退出父进程后退出 的情况。一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。
僵尸进程的坏处:造成资源的浪费。(因为如果大量的产生僵死进程,会因为没有可用的进程号而导致系统不能产生新的进程.)
解决僵尸进程的办法:在父进程调用 wait()
或者 waitpid()
函数( waitpid()
会暂时停止目前进程的执行,直到有信号来到或子进程结束)来释放掉子进程的退出信息。
孤儿进程
概念:简单来说,“孤儿”就是子进程,所以“孤儿进程”就是 父进程先退出子进程再退出 的情况,然后该子进程会由进程号为1的init进程所收养。一个父进程退出,而它的一个或多个子进程还在运行。
孤儿进程的坏处:不会有什么危害。(因为init进程会作为他们的父进程对他们进行处理。)
解决孤儿进程的办法:Linux避免系统存在过多的孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程。相当于有了个继父。