https://www.cnblogs.com/lvyahui/p/7389554.html
https://www.jb51.net/article/111459.htm
为什么要守护进程?
终端或控制台退出时,进程也会退出,即使加了&
1、nohup 启动进程
nohup command >/dev/null 2>&1 &
// >/dev/null 表示将标准输出信息重定向到"黑洞"
// 2>&1 表示将标准错误重定向到标准输出(由于标准输出已经定向到“黑洞”了,即:标准输出此时也是"黑洞",再将标准错误输出定向到标准输出,相当于错误输出也被定向至“黑洞”)
nohup command > myout.file 2>&1 &
//重定向到myout.file
2、忽略SIGHUP
signal(SIGHUP,SIG_IGN);
3、使用setsid
setsid()
4、守护进程例子
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <syslog.h>
#define MAXFD 64
void daemon_init(const char* pname, int facility){
int i;
pit_t pid;
/*fork(),终止父进程*/
if(pid=fork()){
exit(0);
}
/*第一子进程*/
setsid();
signal(SIGHUP,SIG_IGN);
/*fork()终止第一子进程*/
if(pid=fork())
exit(0);
/*第二子进程*/
daemon_proc = 1;
/*将工作目录设定位“/”*/
chdir("/");
/*清除文件掩码*/
umask(0);
for(i = 0; i<MAXFD; i++){
close(i);
}
/*打开log*/
openlog(pname, LOG_PID, facility);
}