C++怎么采用Daemon进行后台程序的部署
本篇内容介绍了“C++怎么采用Daemon进行后台程序的部署”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、如何采用Daemon进行后台程序的部署
在C++中,如果要让一个程序一直在后台运行并且和终端会话分离,我们可以将其作为守护进程运行,以下是创建C++守护进程的一般步骤。
1. 创建子进程
通过调用fork()函数创建一个子进程。这将产生一个新的进程,该进程是原始进程的副本。父进程和子进程从fork()函数的返回值处开始执行。对于子进程,fork()返回0,对于父进程,fork()返回子进程的进程id
2. 终止父进程
在父进程中,使用exit()函数使得其正常退出。这样做是为了让子进程成为孤儿进程进而被init进程(进程ID为1)接管,并且脱离原来的会话。
3. 创建新的会话
在子进程中,调用setsid()函数创建一个新的会话,这将使得子进程成为新会话的领导进程,并且摆脱原来的控制终端。
4. 改变当前工作目录
使用chdir()函数来创建一个新的会话,这将使得子进程成为新会话的领导进程,同时摆脱原来的控制终端。
5. 重设文件权限掩码
通过调用unmask()函数设置一个合适的文件权限,确保守护进程创建的文件具有合适的权限。
6.关闭不需要的文件描述
守护进程通常不需要和用户交互,因此你可以关闭不需要的文件描述符,如标准输入,标准输入和错误文件描述符
二. 代码示例
#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<cstdlib>
using namespace std; //不推荐使用这种写法,但是这里我为了省事就直接这样写了
int main(){
pid_t pid = fork();
if(pid < 0){
cerr<<"Error : Fork Failed!"<<endl;
exit(1);
}
if(pid > 0){
//Father
exit(0);
}
if(setsid() < 0){
cerr <<"Error : Setsid Failed"<<endl;
exit(1);
}
unmask(0);
chdir("/");
//close unnecessary file description
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
while(true){
//daemon logic;
sleep(5);
}
return 0;
}
相关内容
这些是最新的
热门排行
- THINKPHP5+GatewayWorker+Workerman 开发在线客服系统
- 在手机浏览器网页中点击链接跳转到微信界面的方法
- 尊云网站目录系统 ThinkPHP5网站分类目录程序 v2.2.221011
- CentOS 7安装shadowsock(一键安装脚本)
- AdminTemplate 基于LayUI 2.4.5实现的网站后台管理模板
- 用NW.js(node-webkit)开发多平台的桌面客户端
- PHP生成随机昵称/用户名
- THINKPHP5网站分类目录程序 尊云网站目录系统
- 织梦(DEDECMS)微信支付接口 微信插件
- 基于LayUI开发的 网站后台管理模板 BeginnerAdmin
- 响应式后台网站模板 - AMA.ADMIN
- layuiAdmin后台管理模板 Iframe版
- LayUI 1.0.9 升级 至 LayUI 2.1.4 方法
- 简洁清爽的会员中心模板
- jQuery幸运大转盘抽奖活动代码