守护进程和僵尸进程

僵尸进程:在子进程未退出的情况下,父进程退出,子进程被init进程接管,但是子进程将不会正常退出,退出后也不会被收回该进程的资源,所以这种情况应该被避免,否则数量多了以后系统资源将被消耗完.为了避免这种情况可以是用vfork函数进行子进程的派生,或者在父进程中使用一下函数来等待子进程的退出:

头文件<sys/types.h><sys/wait.h>
int wait(int *status);//暂停目前进程的执行,直到有信号来激活或者子进程执行结束
int waitpid(int pid,int *status,int options);
//等待pid代表的子进程的执行结束,pid = -1,相当于wait。等待任何子进程

---------------------------------------------------------------------------------------------------------

守护进程:一直在后台运行,父进程为init,和僵尸进程类似,不同的是守护进程多为服务进程,是需要一直提供服务所以不能退出.

守护进程的一般编写步骤:

  1. 脱离控制终端(父进程),使父进程为init
  2. 禁止进程重新打开控制终端
  3. 关闭文件描述符(从父进程继承了文件描述符,最好先进行关闭,避免不必要的系统资源的浪费)
  4. 更改工作目录(避免工作目录被卸载)
  5. 重设文件创建掩码(避免创建文件的时候权限和我们所需要权限不一致)
  1. int c = 0;
  2. int pid = fork();
  3. if(pid > 0){         //退出父进程,使其父进程为init
  4. exit(0);
  5. }
  6. if(pid < 0){        //子进程创建失败 退出
  7. exit(1);
  8. }
  9. for(;c < 101122;c++){        //关闭文件描述符
  10. close(c);
  11. }
  12. chdir("/");                         //更改工作目录
  13. umask(0);                        //重新设置文件创建掩码
  14. while(1){//死循环让其一直在后台运行
  15. //编写该进程所需要做的工作
  16. }

 

原文链接: https://www.cnblogs.com/CHYI1/p/5400623.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    守护进程和僵尸进程

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/232047

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午3:17
下一篇 2023年2月13日 下午3:17

相关推荐