首页 > 代码库 > 服务器程序后台化以及守护进程的编写规范
服务器程序后台化以及守护进程的编写规范
一般的服务器程序都是以后台进程(守护进程)的方式运行,那么要如何使得服务器进程后台化呢?
下面介绍守护进程的编写遵循的步骤:
1. 创建子进程,关闭父进程;2. 设置文件权限掩码。当进程创建新文件(使用open(const char *pathname, int flags, mode_t mode)系统调用时,文件的权限将是mode&0777;
3. 创建新会话,设置本进程为进程组的首领;
4. 切换工作目录;
5. 关闭标准输入设备、标准输出设备和标准错误输出设备;
6. 关闭其他已经打开的文件描述符;
7. 将标准输入、标准输出、标准错误重定向到/dev/null文件
下面是一个例子:
bool daemonize(){ pid_t pid = fork(); if ( pid < 0 ) { return false; } else if ( pid > 0 ) { exit( 0 ); } umask( 0 ); pid_t sid = setsid(); if ( sid < 0 ) { return false; } if ( ( chdir( "/" ) ) < 0 ) { /* Log the failure */ return false; } close( STDIN_FILENO ); close( STDOUT_FILENO ); close( STDERR_FILENO ); open( "/dev/null", O_RDONLY ); open( "/dev/null", O_RDWR ); open( "/dev/null", O_RDWR ); return true;}
实际上,Linux提供了完成同样功能的库函数:
#include <unistd.h>int daemon(int nochdir, int noclose);
其中,nochdir参数用于制定是否改变工作目录,如果nochdir = 0,则工作目录将被设置为根目录(/),否则继续使用当前工作目录。
noclose = 0时,标准输入、标准输出、标准错误都被重定向到/dev/null文件,否则依然使用原来的设备。
成功返回0,失败返回-1
服务器程序后台化以及守护进程的编写规范
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。