Chinaunix首页 | 论坛 | 博客
  • 博客访问: 292833
  • 博文数量: 109
  • 博客积分: 2116
  • 博客等级: 大尉
  • 技术积分: 1062
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-22 15:38
文章分类

全部博文(109)

文章存档

2013年(2)

2011年(16)

2010年(90)

2009年(1)

我的朋友

分类: LINUX

2010-07-09 11:18:37

Linux进程一般分为交互进程,批处理进程,守护进程三类。

守护进程是脱离终端控制后台运行的进程。系统载入时启动,系统关闭时终止。

编写守护进程的流程如下:

1创建子进程,父进程退出。孤儿进程由init领养。

2在子进程中创建新会话。setsid

3改变当前目录为根目录

4重设文件权限掩码

5关闭文件描述符

下面是一个守护进程实例,创建以后实现每隔10秒向日志文件/tmp/daemon.log写入一句话。

源代码来自华清远见:

#include

#include

#include

#include

#include

#include

#include

 

int main()

{

    pid_t pid;

    int i, fd;

    char *buf = "this is a daemon!\n";

 

    pid = fork();//创建子进程,父进程退出

    if(pid < 0)

    {

        printf("error fork!\n");

        exit(1);

    }

    else if(pid > 0)

    {

        exit(0);

    }

   

    setsid();//子进程中创建新会话

    chdir("/");//改变当前目录为根目录

    umask(0);//重新设置文件权限

    for(i = 0; i < getdtablesize(); i++)//关闭文件描述符

    {

        close(i);

    }

    //创建完成正式开始守护进程工作

    while(1)

    {

        if((fd = open("/tmp/daemon.log", O_CREAT|O_WRONLY|O_APPEND, 0600)) < 0){

            printf("Open file error!\n");

            exit(1);

        }

        write(fd, buf, strlen(buf) + 1);

        close(fd);

        sleep(10);

    }

    exit(0);

}

交叉编译在目标板运行结果如下:

可以看出在后台运行了一个循环写入的进程。

阅读(590) | 评论(0) | 转发(0) |
0

上一篇:文件读写上锁

下一篇:日志系统

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