Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161941
  • 博文数量: 17
  • 博客积分: 1056
  • 博客等级: 少尉
  • 技术积分: 240
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-08 23:27
文章分类

全部博文(17)

文章存档

2012年(1)

2011年(1)

2009年(4)

2008年(11)

我的朋友

分类: LINUX

2009-02-17 13:05:57

 

void init_daemon(void)
{
    int pid;
    int i;

    if((pid=fork())>0)
        exit(0);//是父进程,结束父进程

    else if(pid< 0)
        exit(1);//fork失败,退出


    //是第一子进程,后台继续执行

    //setsid();//第一子进程成为新的会话组长和进程组长

    if(setsid()<0)
        exit(1);
    //并与控制终端分离

    if((pid=fork()))
        exit(0);//是第一子进程,结束第一子进程

    else if(pid< 0)
        exit(1);//fork失败,退出

    //是第二子进程,继续

    //第二子进程不再是会话组长


    for(i=0;i<NOFILE;++i)//关闭打开的文件描述符

        close(i);
    chdir("./");//改变工作目录到/tmp

    umask(0);//重设文件创建掩模    

    open("/dev/null",O_RDWR);
    dup(1);
    dup(2);
    return;
}

 

 

一定记得

open("/dev/null",O_RDWR);
    dup(1);
    dup(2);

否则会出现 意想不到的结果1

阅读(1462) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~