守护进程的编写

103 篇文章 1 订阅
80 篇文章 0 订阅

1、概念:是运行在后台,并确一直在运行的特殊进程,独立于控制终端并确周期性的执行某种任务或等待处理某些发生的事件。
2、特点:(1)运行在后台。
        (2)必须与其运行前的环境(为关闭的文件描述符、控制终端、会话、进程组、工作目录、文件创建掩码等)隔离开来。
        (3)启动时从启动脚本/etc/rc.d或作业规划进程crond或用户终端(shell)启动执行。
3、用途:提供后台服务。
4、编写流程:(1)创建子进程、终止父进程。
           (2)使用系统函数setsid在子进程中创建新会话。
           (3)使用chdir改变工作目录.
           (4)使用umask函数重设文件创建掩码。
           (5)关闭文件描述符。
5、例:函数每个10秒想/tmp目录中的日志example.log报告运行状态。
#include<stdio.h>
#include<time.h>
#include<unistd.h>
#inlcude<signal.h>
#inlcude<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
void init_daemon(void); /*守护进程初始化函数*/
int main()
{
    FILE *fp;
    time_t t;
    init_daemon();
    while(1)
    {
        sleep(10);
        if((fp=fopen(example.log,a+))>=0)
        {
            t=time(0);
            fprintf(fp,"守护进程还在运行,时间是:%s\n",asctime(localtime(&t)));
            fclose(0);
        }
    }
}
void init_daemon(void)
{
    pid_t child1,child2;
    int i;
    child1=fork();       /*创建子进程*/
    if(child1<0)
    {
        perror("创建子进程失败\n");
        exit(1);
    }
    else if(child1>0)  /*结束父进程*/
        exit(0);
    setsid();    /*创建新会话,并担任该会话组的组长*/
    chdir("/tmp"); /*改变工作目录到/tmp下*/
    umask(0);       /*重设文件创建掩码*/
    for(i=0;i<NOFILE;i++)  /*关闭文件描述符*/
        close(i);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值