博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将进程设置为守护进程
阅读量:4350 次
发布时间:2019-06-07

本文共 1245 字,大约阅读时间需要 4 分钟。

  在正常条件下,我们将程序运行产生的信息打印到控制台实时显示,如果我们想讲一个程序以守护进程的方式进行运行,就需要改变信息的输出方向,将其导向到配置文件里设置的日志文件。

  将一个进程转换为守护进程需要进行几个步骤:

  1.fork一个新的进程,将父进程退出。

  2.将0、1、2三个文件描述符重定向。

  3.将1重定向到日志文件。

void daemonize(){           if(fork() != 0)     //将父进程退出                      exit(0);           setsid();            //设置新的会话           LOG(LOG_LEVEL_INFO, "Daemonized ... pid = %d", (int)getpid());            int fd = 0;              if((fd = open("/dev/null", O_RDWR, 0)) != -1)  //打开空设备文件           {                      dup2(fd, STDIN_FILENO);         //将0重定向到/dev/null                      dup2(fd, STDOUT_FILENO);      //将1重定向到/dev/null                      dup2(fd, STDERR_FILENO);      //将2重定向到/dev/null                      if(fd > STDERR_FILENO)                                   close(fd);           }           if(g_conf->log_file != NULL && (fd = open(g_conf->log_file, O_RDWR|O_APPEND|O_CREAT, 0))!= -1)           {                      dup2(fd, STDOUT_FILENO);      // 将2重定向到日志文件                      if(fd>STDERR_FILENO)                                  close(fd);           }}

  其中dup2函数的作用是负复制文件描述符,将第一个参数中的文件描述符复制到第二个参数的文件描述符,即第二个文件描述符指向第一个文件描述符指向的文件,这意味着,这两个描述符共享同一个数据结构file结构体,这个file结构体的引用计数为2。

转载于:https://www.cnblogs.com/canyudeguang/p/6854383.html

你可能感兴趣的文章
JavaScript原生错误及检测
查看>>
(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(3): 深度克隆clone()
查看>>
为什么写作
查看>>
整数子数组求最大和添加验证
查看>>
使用kubeadm安装Kubernetes
查看>>
Principal Component Analysis 主元分析
查看>>
JDBC原生态代码
查看>>
韩版可爱小碎花创意家居收纳挂袋
查看>>
计算机基础之硬件
查看>>
python操作mysql ------- SqlAchemy正传
查看>>
如何使用 JSP JSTL 显示/制作树(tree) 菜单
查看>>
12.5号
查看>>
lintcode-medium-Binary Tree Zigzag Level Order Traversal
查看>>
logrotate日志切割
查看>>
POJ-3253 Fence Repair 贪心
查看>>
Arraylist集合遍历输出
查看>>
java中的选择结构与循环结构
查看>>
无法将类型“ASP.login_aspx”转换为“System.Web.UI.WebControls.Login”
查看>>
[cocos2dx] lua注册回调到c++
查看>>
(treap)[bzoj3224][洛谷3369][cogs1829]Tyvj 1728 普通平衡树
查看>>