1.守护进程的特点:
(1) 守护进程是Linux中三大进程之一,始终运行在后台,通常系统开启时运行,系统关闭时结束。
(2)独立于控制终端(与终端无关)。
(3)周期性执行某种任务或等待某些发生的事件。
2.创建守护进程
(1)创建子进程,父进程退出 (子进程成为后台进程)
if(fork()>0)
{
exit(0);
}
(2)设置新的会话
Linux是以会话、进程组的方式管理进程的,每个进程属于一个进程组,会话是一个或多个进程组的集合,通常用户打开一个终端,系统会创建一个会话,所有通过该终端运行的程序都属于这个会话。
一个会话最多打开一个终端,当控制终端关闭,所有相关进程也会结束。
#include <sys/types.h>
#include <unistd.h>
pid_t setsid(void);
(3)设置工作目录
#include <unistd.h>
int chdir(const char *path);
(4)重设文件掩码
#include <sys/types.h>
#include <sys/stat.h>
mode_t umask(mode_t mask);
(5)关闭从父进程继承下来的文件描述符
#include <unistd.h>
int getdtablesize(void);
(6)周期执行任务
案例:每隔5秒将系统时间写入到文件
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
int main(void)
{
//1.创建子进程,父进程退出
if(fork() > 0)
{
exit(0);
}
//2.设置新会话
if(setsid() < 0)
{
perror("setsid error");
return -1;
}
//3.设置工作目录
chdir("/tem");
//4.修改文件掩码
umask(0);
//5.关闭从父进程继承下来的文件描述符
int i = 0;
for(i = 0;i < getdtablesize();i++)
{
close(i);
}
//6.周期执行任务
while(1)
{
system("echo `date` >> test.txt");
sleep(5);
}
return 0;
}
执行结果如下:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。