当前位置:项目开发->项目经验 ->Linux系统守护进程功能的实现代码和分析

原创版权标志Linux系统守护进程功能的实现代码和分析

作者:codexia  发表时间:2018/5/4 9:13:02  阅读:
[摘要] 守护进程就是和被守护的进程一起运行的一个进程,当被守护的进程死掉之后,就立刻再创建一个被守护的进程。不管被守护的进程是被手动杀死,还是异常崩溃,还是正常结束,守护进程都可以再启动一个被守护的进程,继续提供服务。
广告招租:800元/月,QQ:1162839541
    此前讲解了在Windows环境下的守护进程的实现方法和代码,见:《守护进程的原理和C++实现守护进程的代码》。
    今天再来说说Linux的守护进程的实现方法和代码。对于守护进程的概念,就不再重复了,请看前面的文章的讲解。
    简单来说,守护进程就是和被守护的进程一起运行的一个进程,当被守护的进程死掉之后,就立刻再创建一个被守护的进程。不管被守护的进程是被手动杀死,还是异常崩溃,还是正常结束,守护进程都可以再启动一个被守护的进程,继续提供服务。
    那么我们需要的就是当被守护进程死掉的时候,守护进程立刻就知道,并且立刻启动被守护的进程。那么这个可以通过系统内核的信号量机制,对于进程的同步机制,系统内核是直接就支持的。也就是说,当进程死掉的时候,系统就会产生一个信号,来通知守护进程。所以我们实现这个功能是很简单的,不过需要了解操作系统的朋友才会觉得简单。
    那么下面就贴出完整的代码:
#include <pthread.h>
#include <sys/wait.h> 
int main()
{
 pid_t child;
 while(1)
 {
 if((child = fork()) == -1) 
 {
 //出错
 exit(EXIT_FAILURE); 
 } 
 else if(child == 0)//子进程中 
 {
 //这里编写你的代码,这里就是被守护进程要做的事情
 } 
 else 
 {
 //这里实现的是守护进程的功能。
 int status=-1;
 waitpid( child, &status, 0 );
 } 
 }
 return 0;
}

    代码是不是很简单?!一个while,然后一组if else就可以了。这里用到了两个函数,分别是fork()和waitpid,分别需要导入头文件pthread.h和sys/wait.h。

fork函数(百度百科解释):
    计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;否则,出错返回-1。
    fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。
    更多详细解释,请参考:https://baike.baidu.com/item/fork/7143171?fr=aladdin
    看完解释,我们就不难理解,为什么我们的程序结构是上面那样的。重点理解一下fork函数的运作机制。

waitpid函数:
    会暂时停止目前进程的执行,直到有信号来到或子进程结束。
    此函数相当于一直在等待被守护的进程结束,然后才会继续执行。

    主要是理解这两个函数,如果还有问题,请查询这两个函数的资料。
文章来源:C++技术网原创文章版权为网站和作者共同所有,会员文章禁止转载。非会员文章转载做好本文超链接即表示授权转载。通过文章下面的分享按钮可以自由分享所有文章。

返回顶部

在线提问
问题标题:
问题描述:(简陋的描述会导致问题被最后回答、没有针对性回答甚至无法解答。请确保问题描述的足够清楚。)