首页 > 系统服务 > 详细

服务器程序后台化以及守护进程的编写规范

时间:2014-11-18 15:52:24      阅读:286      评论:0      收藏:0      [点我收藏+]

一般的服务器程序都是以后台进程(守护进程)的方式运行,那么要如何使得服务器进程后台化呢?

下面介绍守护进程的编写遵循的步骤:

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

服务器程序后台化以及守护进程的编写规范

原文:http://www.cnblogs.com/wiessharling/p/4105956.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!