现在的位置: 首页 > 综合 > 正文

Linux 下创建守护进程

2014年03月13日 ⁄ 综合 ⁄ 共 908字 ⁄ 字号 评论关闭

1,创建子进程,父进程退出

pid = fork();
if (pid >0)
{
exit(
0);
}
 

2. 在子进程中创建新会话

使用setsid

主要是使进程摆脱原会话的控制,摆脱原进程组的控制,摆脱原控制终端的控制。

3.改变当前目录为根目录

使用fork创建的子进程继承了父进程的当前工作目录,由于进程运行过程中,当前目录所在的文件系统(比如/mnt/usb等)是不能卸载的,这对以后使用会造成很多不便,比如系统由于某种原因需要进入单用户模式)因此,通常将“/”做为守护进程的当前工作目录 使用chdir

4.重新设置文件权限演码

umask(0)

5.关闭文件描述符

for (i=0; i<MAXFILE;i++){

close(i);
}

详细代码

 

/**
 * @file:       daemon.c
 * @brief:      daemon
 * @author:     wangbing
 * @date:       2007-11-9
 * @version:    1.0
 
*/


#include 
<stdlib.h>
#include 
<string.h>
#include 
<unistd.h>
#include 
<signal.h>
#include 
<sys/param.h>
#include 
<errno.h>
#include 
<sys/file.h>
#include 
<sys/ioctl.h>
#include 
<sys/stat.h>
#include 
<sys/time.h>

int daemon_start(void)
{
    
int i;
    pid_t pid;
    
    
if( (pid = fork()) < 0)
    
{
        
return(-1);
    }

    
else if (pid!=0)
    
{
        exit(
0);
    }

    
   setsid();
   chdir(
"/");
   umask(
0):
   
for (i=0; i<MAXFILE; i++)
   
{
    close(i);
}

    
return 0;
}

抱歉!评论已关闭.