守护进程及其编程流程

守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之后,需要执行其他任务。(2)(如其他用户登录该终端后,以前的守护进程的错误信息不应出现)由终端上的一些键所产生的信号(如中断信号),不应对以前从该终端上启动的任何守护进程造成影响。要注意守护进程与后台运行程序(即加&启动的程序)的区别。

守护进程也被称为精灵进程,是生存周期比较长的一种进程。它们常常在系统自举时启动,仅在系统关闭时终止,且没有控制终端,在后台运行。

 

编程流程:

    先fork,退出父进程  
    通过setsid()创建新对话  (使其失去进程组组长身份,以免和其它进程关联起来)
    再fork,退出父进程 
    子进程中调用chdir函数,修改工作目录  (将其放在不可卸载目录下,因为生存周期长,可能误杀)
    调用mask函数,清除掩码  (去除权限)
    关闭所有文件描述符 (长时间后台运行,所以不需要的描述符要关闭) 

代码:

void mydaemon()                 //只fork()一次
{    
    umask(0);                   //用umask将文件模式创建为屏蔽字为0    
    if(fork() == 0)             //fork子进程,关闭父进程    
    {
    }    
    else    
    {        
    exit(0);    
    }    
    setsid();                   //让子进程成为一个守护进程    
    chdir("/");                 //更改当前目录为根目录    
    close(0);                   //关闭默认的文件描述符表    
    close(1);    
    close(2);    
    signal(SIGCHLD, SIG_DFL);   //忽略SIGCHLD信号
}

int main()
{     
    mydaemon();//  
    daemon(0, 0);                //系统自己定义的守护进程,没有关闭它的默认的文件描述符表,两个参数(默认更改路径到'/', 不关闭文件描述符表)     
    while(1)   
    {}    
    return 0;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值