免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1452 | 回复: 1
打印 上一主题 下一主题

[C] 关于守护进程创建的问题 [复制链接]

论坛徽章:
1
2015元宵节徽章
日期:2015-03-06 15:53:22
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-02-08 13:19 |只看该作者 |倒序浏览
创建守护进程时,通常有几个步骤,其中第一个步骤是:创建子进程,父进程退出。
本人感到疑惑的是,创建守护进程无非就是为了脱离进程组,脱离会话组,可以不必通过终端来启动,但是从创建守护进程的步骤来看,好像也是须要先将父进程启动,然后才能启动子进程,即守护进程。

下面是实现守护进程的一个完整实例:
该实例首先建立了一个守护进程,然后让该守护进程每隔10s在/tmp/dameon.log 中写入一句话。
/*dameon.c创建守护进程实例*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<fcntl.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#define MAXFILE 65535
int main()
{
   pid_t pc;
   int i,fd,len;
   char *buf="This is a Dameon\n";
   len =strlen(buf);
   pc=fork(); //创建守护进程的第一步,即,创建子进程,父进程退出
   if(pc<0){
       printf("error fork\n");
       exit(1);
   }
   else if(pc>0)
       exit(0);
/*第二步*/
   setsid();
/*第三步*/
   chdir("/");
/*第四步*/
   umask(0);
   for(i=0;i<MAXFILE;i++)
/*第五步*/
   close(i);
/*这时创建完守护进程,以下开始正式进入守护进程工作*/
   while(1){
       if((fd=open("/tmp/dameon.log",O_CREAT|O_WRONLY|O_APPEND,0600))<0){
            perror("open");exit(1);
       }
       write(fd, buf, len+1);
       close(fd);
       sleep(10);
   }
}

将以上程序编译后,同样需要运行编译得到的可执行文件,才能将守护进程运行起来。那这样,创建的守护进程不是没什么意义了吗?

论坛徽章:
4
双子座
日期:2014-08-28 10:08:002015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:58:112015年亚洲杯之阿联酋
日期:2015-03-13 03:25:15
2 [报告]
发表于 2015-02-09 13:12 |只看该作者
我不知道你怎么理解“守护进程”这几个字,我觉得可能是翻译的问题,我觉得更多是不太容易受到其他的东西影响
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP