【C++】Linux环境下创建守护进程
原本是计划把C++服务器的内容一起写出来,但是由于我写博速度还是太慢,所以这次先把我每次服务器开发都要遇到的第一步——守护进程的内容整理出来。以下内容结合了网上各种资料和我自己理解及写代码观察实验总结,如有不正确的地方,望指正,谢谢。
守护进程C++代码
#include <unistd.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
using namespace std;
//将程序进程变为守护进程
void setDaemon(){
//1. 创建子进程,每个进程都会返回一个数字,父进程返回子进程的pid,子进程返回0
int ret_code = fork();
if (ret_code < 0){
exit(1);
}else if (ret_code>0){
//父进程退出
exit(0);
}
//2. 令子进程与父进程的会话组和进程组脱离,令子进程不受终端关闭影响
setsid();
//3. 如果担心目前进程会打开终端并受终端影响,可再fork一次,新进程将不会是会话组长,因此无法打开新终端。
// 这一步不是必须的。
ret_code = fork();
if (ret_code < 0){
exit(1);
}else if (ret_code>0){
exit(0);
}
//4. 改变进程的工作目录
chdir("/");
//5. 设置进程的文件操作权限,使进程拥有最大权限
umask(0);
//6. 将父进程打开的文件描述符关闭
//getdtablesize():获取描述符表的大小
for