[Linux系统] 编写一个守护进程

daemon.c文件:

// daemon.c
#include<stdio.h>
#include<signal.h>
#include<sys/param.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<stdlib.h>

int init_daemon(void)
{
    pid_t pid;
    int i;

    pid = fork();
    if(pid > 0){
        //第一步,结束父进程,使得子进程成为后台
        exit(0);
    }else if(pid < 0){
        return -1;
    }
    /*第二步建立一个新的进程组,在这个新的进程组中,子进程成为这个进程组的首进程,以使该进程脱离所用终端*/
    setsid();
    /*再次新建一个子进程,退出父进程,保证该进程不是进程组长,同时让该进程无法再打开一个新的终端*/
    pid = fork();
    if(pid > 0){
        exit(0);
    }else if(pid < 0){
         return -1;
    }
    //第三步:关闭所用从父进程继承的不再需要的文件描述符
    for(i = 0;i < NOFILE;close(i++));
    //第四步:改变工作目录,使得进程不与任何文件系统联系
    chdir("/");
    //第五步:将文件屏蔽字设置为0
    umask(0);
    //第六步:忽略SIGCHLD信号
    signal(SIGCHLD,SIG_IGN);
    return 0;
}

test.c文件:

// test.c
#include<stdio.h>
#include<time.h>
#include<syslog.h>
extern int init_daemon(void);

int main()
{
    time_t now;
    init_daemon(); //初始化Daemon
    syslog(LOG_USER | LOG_INFO,"测试守护进程!/n");
    while(1){
        sleep(8);//睡眠一分钟
        time(&now);
        syslog(LOG_USER | LOG_INFO,"系统时间:/t%s/t/t/n",ctime(&now    ));
    }
}

(✿◠‿◠) 

猜你喜欢

转载自www.cnblogs.com/leokale-zz/p/12163493.html