码迷,mamicode.com
首页 > 系统相关 > 详细

守护进程和僵尸进程

时间:2016-04-17 13:10:18      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

僵尸进程:在子进程未退出的情况下,父进程退出,子进程被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. }

 

守护进程和僵尸进程

标签:

原文地址:http://www.cnblogs.com/CHYI1/p/5400623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!