linux守护进程daemon

linux守护进程:


linux很多的系统服务都是守护进程,例如本地的系统服务crond计划任务 , 网络服务:web httpd


如何将一个进程转换为守护进程呢?




一.概念:
    进程:
每一个进程都有父进程(祖先进程是INIT进程 ,PID 1)相关系统调用 fork();
子进程终止,父进程会得到通知,并且获取子进程的退出状态:相关:wait()




    进程组:
每个进程也属于一个进程组;
每个进程组也有一个ID,ID是组长的PID;
一个进程只能为自己和子进程设置进程ID;

    会话期(session):
     会话期是一个或者多个进程组的集合;
    setsid()可以建立一个会话期
    如果setsid不是进程组的组长的话,会创建一个新的会话期.
    1.此进程编程新的会话期的首进程组
    2.此进程编程新的进程组的组长
    3.脱离控制终端的关系


   如果是子进程的组长的话,返回错误
   为了保证这一点,所以我们先调用fork 然后再调用  exit
  
    代码:
pid_t pid,sid;
pid = fork();
if(pid < 0)
{
  exit(-1);//error
}
else if(pid > 0)
{
  exit(0);//father exit(0)
}
else 
{
   sid = setsid();//child create
}
  ......


二.守护进程的特性
1.在后台运行的;
2.与当前的环境隔离开来,关闭文件描述符,控制终端,会话,以及文件掩码等等
3.启动方式  /etc/rc.d    /etc/init.d/   shell  crond(计划任务)



三.
    编程要点:
      1. pid = fork();
if(pid > 0)
{
  exit(0);
}//关闭父进程


      2. 脱离控制终端,登陆会话和进程组
以上都从父进程中继承来的,必须要摆脱他们,使之不受影响;
setsid();//一个函数搞定
    
/*关系  一对多


会话-》进程组-》进程*/
***失败原因:进程本来就是进程组的组长,但是第一步已经避免了


       3.关闭打开的文件描述符
系统默认打开的文件描述符  标准输入,标准输出,标准错误(0,1,2);
 close(STDIN_FILENO);标准输入
close(STDOUT_FILENO);标准输出
close(STDERR_FILENO);标准错误




4.改变当前目录
 进程活动时,当前的工作目录所在的文件系统是不能卸载的,所以一般改工作目录到'/'  root
chdir("/");




5.重新设置文件掩码umask


 进程从创建的父进程哪里继承了文件掩码,所以需要重设umask(0);


       
以上基本上就完成了整个守护进程的操作;




代码实例:

void init_daemon()
{
        pid_t pid,sid;
        pid = fork();
        if(pid < 0)
        {
          exit(-1);
        }
        else if(pid > 0)
        {
            exit(0);
        }
        else
        {
           sid = setsid();
        }
        chdir("\");
        umask(0);
        close(STDIN_FILENO);
        close(STDOUT_FILENO);
        close(STDERR_FILENO);
}


 
Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值