写点什么

C++ 采用 Daemon 进行后台程序部署

作者:向阳逐梦
  • 2023-07-17
    四川
  • 本文字数:778 字

    阅读完需:约 3 分钟

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 descriptionclose(STDIN_FILENO);close(STDOUT_FILENO);close(STDERR_FILENO);while(true){  //daemon logic;  sleep(5);  }return 0;}
复制代码



发布于: 刚刚阅读数: 6
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022-06-01 加入

某公司芯片测试工程师,嵌入式开发工程师,InfoQ签约作者,阿里云星级博主,华为云·云享专家。座右铭:向着太阳,追逐梦想!

评论

发布
暂无评论
C++采用Daemon进行后台程序部署_向阳逐梦_InfoQ写作社区