Intern Day89

fork函数

  1. fork函数调用次数:一次会运行/返回2次,一次是父进程运行的,一次是子进程运行的,谁先运行顺序不一定,由操作系统调度器说了算。

  2. fork函数调用返回值:等于0的是子进程,返回值大于0的是父进程。

  3. fork函数作用:从已经存在的进程(父进程)中创建一个子进程。

  4. fork后执行代码的顺序一定是先子进程后父进程吗?不是,这完全看CPU调度。

注意

UID = 用户ID,PID = 进程ID,PPID = 父进程ID

僵尸进程

概念:简单来说,就是 子进程先退出父进程后退出 的情况。一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。

僵尸进程的坏处:造成资源的浪费。(因为如果大量的产生僵死进程,会因为没有可用的进程号而导致系统不能产生新的进程.)

解决僵尸进程的办法:在父进程调用 wait() 或者 waitpid() 函数( waitpid() 会暂时停止目前进程的执行,直到有信号来到或子进程结束)来释放掉子进程的退出信息。

孤儿进程

概念:简单来说,“孤儿”就是子进程,所以“孤儿进程”就是 父进程先退出子进程再退出 的情况,然后该子进程会由进程号为1的init进程所收养。一个父进程退出,而它的一个或多个子进程还在运行。

孤儿进程的坏处:不会有什么危害。(因为init进程会作为他们的父进程对他们进行处理。)

解决孤儿进程的办法:Linux避免系统存在过多的孤儿进程,init进程收留孤儿进程,变成孤儿进程的父进程。相当于有了个继父。

参考

  1. https://www.cnblogs.com/Anker/p/3271773.html

  2. https://blog.csdn.net/weixin_40734514/article/details/108990454

  3. https://blog.csdn.net/qq_41880190/article/details/84197233?ops_request_misc=%7B%22request%5Fid%22%3A%22162116995716780261943865%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=162116995716780261943865&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-84197233.first_rank_v2_pc_rank_v29&utm_term=linux僵尸进程和孤儿进程&spm=1018.2226.3001.4187

  4. 关于 waitpid() 函数的使用:https://blog.csdn.net/oguro/article/details/53841703?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-4&spm=1001.2101.3001.4242

原文地址:https://www.cnblogs.com/OFSHK/p/14776532.html