Chinaunix首页 | 论坛 | 博客
  • 博客访问: 122934
  • 博文数量: 25
  • 博客积分: 1465
  • 博客等级: 上尉
  • 技术积分: 270
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-26 17:06
文章分类

全部博文(25)

文章存档

2011年(2)

2010年(8)

2009年(15)

我的朋友

分类: LINUX

2009-10-21 00:28:15

 守护进程实例
  守护进程实例包括两部分:主程序test.c和初始化程序init.c。
    主程序每隔一分钟向/tmp目录中的日志test.log报告运行状态。
    初始化程序中的init_daemon函数负责生成守护进程。读者可以利用init_daemon函数生成自己的守护进程。
1. init.c清单
#include < unistd.h >
#include < signal.h >
#include < sys/param.h >
#include < sys/types.h >
#include < sys/stat.h >
void init_daemon(void)
{
    int pid;
    int i;
    if(pid=fork())
        exit(0);        //是父进程,结束父进程
    else if(pid< 0)
        exit(1);        //fork失败,退出
    //是第一子进程,后台继续执行
    setsid();           //第一子进程成为新的会话组长和进程组长
    //并与控制终端分离
    if(pid=fork())
        exit(0);        //是第一子进程,结束第一子进程
    else if(pid< 0)
        exit(1);        //fork失败,退出
    //是第二子进程,继续
    //第二子进程不再是会话组长
    for(i=0;i< NOFILE;++i)  //关闭打开的文件描述符
        close(i);
    chdir("/tmp");      //改变工作目录到/tmp
    umask(0);           //重设文件创建掩模
    return;
}
2. test.c清单
#include < stdio.h >
#include < time.h >
void init_daemon(void);//守护进程初始化函数
main()
{
    FILE *fp;
    time_t t;
    init_daemon();//初始化为Daemon
    while(1)//每隔一分钟向test.log报告运行状态
    {
        sleep(60);//睡眠一分钟
        if((fp=fopen("test.log","a")) >=0){
            t=time(0);
            fprintf(fp,"Im here at %sn",asctime(localtime(&t)) );
            fclose(fp);
        }
    }
}
以上程序在RedHat Linux6.0下编译通过。步骤如下:
编译:gcc -g -o test init.c test.c
执行:./test
查看进程:ps -ef

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zg_hover/archive/2008/06/16/2553321.aspx
阅读(1395) | 评论(0) | 转发(0) |
0

上一篇:PPPoE在基于嵌入式操作系统

下一篇:工具

给主人留下些什么吧!~~