本篇内容介绍了“C++怎么采用Daemon进行后台程序的部署”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
在C++中,如果要让一个程序一直在后台运行并且和终端会话分离,我们可以将其作为守护进程运行,以下是创建C++守护进程的一般步骤。
通过调用fork()函数创建一个子进程。这将产生一个新的进程,该进程是原始进程的副本。父进程和子进程从fork()函数的返回值处开始执行。对于子进程,fork()返回0,对于父进程,fork()返回子进程的进程id
在父进程中,使用exit()函数使得其正常退出。这样做是为了让子进程成为孤儿进程进而被init进程(进程ID为1)接管,并且脱离原来的会话。
在子进程中,调用setsid()函数创建一个新的会话,这将使得子进程成为新会话的领导进程,并且摆脱原来的控制终端。
使用chdir()函数来创建一个新的会话,这将使得子进程成为新会话的领导进程,同时摆脱原来的控制终端。
通过调用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; }
“C++怎么采用Daemon进行后台程序的部署”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。