一、守护进程的概念
守护进程是一个在后台运行并且不受任何终端控制的进程
二、自己实现守护进程
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.如何让自己不是组长,setsidif (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);}
}