后台守护进程的创建

后台守护进程的创建

damon.c



#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/stat.h>
#include<signal.h>
#include<time.h>
#include<syslog.h>
//初始化后台守护进程
int init_diamon(void){
        int pid;//进程
        int i;
        //忽略终端io信号 和stop信号
        signal(SIGTTOU,SIG_IGN);
        signal(SIGTTIN,SIG_IGN);
        signal(SIGTSTP,SIG_IGN);
        signal(SIGHUP,SIG_IGN);
        //创建进程
        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);
        //忽略信号
        signal(SIGCHLD,SIG_IGN);


        return 0;








}




int main(void){


        time_t now;
        init_diamon();
        syslog(LOG_INFO|LOG_USER,"测试守护进程\n");
        while(1){
                sleep(8);
                time(&now);
                syslog(LOG_INFO|LOG_USER,"系统时间:\t%s\t\n",ctime(&now));
        }
}



gcc -o demon demon.c 

./demon 


验证 ps aux|grep demon

tail -f /var/log/syslog
Aug 10 11:25:50 SERVER demon: 系统时间:#011Wed Aug 10 11:25:50 2016
Aug 10 11:25:58 SERVER demon: 系统时间:#011Wed Aug 10 11:25:58 2016
Aug 10 11:26:06 SERVER demon: 系统时间:#011Wed Aug 10 11:26:06 2016
Aug 10 11:26:14 SERVER demon: 系统时间:#011Wed Aug 10 11:26:14 2016
Aug 10 11:26:22 SERVER demon: 系统时间:#011Wed Aug 10 11:26:22 2016
Aug 10 11:26:30 SERVER demon: 系统时间:#011Wed Aug 10 11:26:30 2016

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值