您的位置:首页 > 运维架构 > Linux

Linux系统编程-守护进程

2017-07-21 19:32 429 查看
守护进程:是指在LINUX或其他多任务操作系统中在后台执行的电脑程序,说了守护进程不得不提到精灵进程。

精灵进程(d a e m o n):是生存期长的一种进程。它们常常在系统引导装入时起动,在系统关闭时终止。因为它们没有控制终端,所以说它们是在后台运行的。

守护进程可以使程序在后台不断地运行,但是以下程序不能在终端上面打印以及输出,可能要做一些复杂的操作才可以,譬如写入文件中,然后在文件中打开,如果嫌弃麻烦可以设定使用定时程序进行定时的清理。

// 头文件的读写可以在终端上面通过指令man XXX完成,想要哪个函数的头文件就man哪个函数
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int daemonize()
{
// 创建子进程,关闭父进程
pid_t pid = fork();
if(pid > 0)
{
exit(0);
}
else if(pid < 0)
{
return 0;
}
// 设置文件掩码,新创建文件的默认权限
umask(0);
// 设置启动新的会话,将当前进程设置为新的会话
pid_t sid = setsid();
if(sid < 0)
{
return 0;
}
// 改变当前目录的工作目录
if(chdir("/") < 0)
{
return 0;
}
// 关闭不使用的文件描述符
close(0);   // 标准输入
close(1);   // 标准输出
close(2);   // 标准出错

// 重定向,标准输入,标准输出以及标准出错!将其使用open函数至目录/dev下
open("/dev/null",O_RDONLY);
open("/dev/null",O_RDWR);
open("/dev/null",O_RDWR);

return 1;
}

int main()
{
daemonize();  // 调用函数
while(1);     // 定义死循环,使其在后台不断地刷新运行
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息