本文内容概述:
1.守护进程的概念,特点,以及创建守护进程的代码实现。
2.两次fork的原因。
3.利用cron进程实现定时向终端打印数据的任务。
守护进程的定义:
守护进程是一种生存期长的进程。通常在系统引导装入时启动,仅仅在系统关闭时终止。他们没有控制终端,所以,是在后台运行的。
守护进程的特点:
我们知道,打开系统,操作系统会通过0号进程去执行相应的操作;1号进程是init进程,也是系统的守护进程,它主要负责启动各运行层次特定的系统服务。
守护进程没有控制终端,不能直接和用户进行交互;不受登录注销的影响,只受开关机的影响。守护进程的命名都会以d结尾。
系统中有很多的守护进程,比如:
cron进程,完成特定的定时任务(下文我还会用cron);
kswapd进程,内存换页的守护进程。
flush进程,在可用内存达到最小阈值来冲洗磁盘。
创建守护进程的步骤:
(1)将文件模式的屏蔽字设置为0;
(2)fork出子进程,终止父进程(保证创建守护进程的进程不是进程组的组长);
(3)调用setsid创建一个新的会话;
(4)将当前工作目录改为根目录;
(5)关闭不需要的文件描述符;
(6)忽略SIGCHLD信号。
当然创建守护进程的另外一个办法就是直接调用库里的daemon()接口实现。下边的代码都是按照以上的6个步骤进行完成的。
代码实现:
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
#include<sys/stat.h>
#include<sys/types.h>
void myDaemond()
{
umask(0);
pid_t id = fork();
if(id < 0)
{
return ;
}
else if(id > 0)
{
exit