【操作系统】守护进程
一、守护进程的概念
守护进程是一个在后台运行并且不受任何终端控制的进程
二、自己实现守护进程
1.预备知识
(1)/dev/null
/dev/null是一个特殊的设备文件,往这个文件里写不进去任何数据,也读不出来任何数据
因此,/dev/null这个设备通常也被成为位桶(bit bucket)或黑洞
(2)setsid()函数
2.代码实现
#pragma once
#include <unistd.h>
#include <signal.h>
#include <cstdlib>
#include <cassert>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define DEV "/dev/null"
void daemonSelf()
{
// 1.让调用进程忽略掉异常的信号
signal(SIGPIPE, SIG_IGN);
// 2.如何让自己不是组长,setsid
if (fork() > 0)
exit(0);
// 子进程--守护进程,精灵进程,本质就是孤儿进程的一种!
pid_t n = setsid();
assert(n != -1);
// 3.守护进程是脱离终端的,关闭或者重定向 以前的进程 默认打开的文件
int fd = open(DEV, O_RDWR);
if(fd >= 0)
{
dup2(fd ,0);
dup2(fd ,1);
dup2(fd ,2);
close(fd);
}
else
{
close(0);
close(1);
close(2);
}
}