一、套路
直接来,不铺垫了;
#include<iostream>
#include<string>
#include<cstdlib>
#include<unistd.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<funtl.h>
const std::string nullfile = "/dev/null"
void daemo(const std::string& cwd ="")
{
//1.忽略其他信号,防止守护进程关闭
signal(SIGCLD,SIG_IGN);
signal(SIGPIPE,SIG_IGN);
signal(SIGSTOP,SIG_IGN);
//2.将自己变成独立的回话;
if(fork() > 0){
exit(0);
setsid(); //变成守护进程了;
}
//3.更改当前进程的目录
if(!cwd.empty()){
chdir(cwd.c_str);}
//4.将标准输入、输出、错误,重定向到/dev/null;
int fd = open(nullfile.c_str(),O_RDWR);
if(fd>0){
dup2(fd,0);
dup2(fd,1);
dup2(fd,2);
close(fd);
}