Chinaunix首页 | 论坛 | 博客
  • 博客访问: 217389
  • 博文数量: 38
  • 博客积分: 2060
  • 博客等级: 大尉
  • 技术积分: 388
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-17 10:10
文章分类

全部博文(38)

文章存档

2011年(1)

2009年(37)

我的朋友

分类: LINUX

2009-07-30 20:55:48

精灵进程是一种生存周期很长的进程,它们常随系统启动而启动,在系统结束时结束。因为没有控制终端,所以说他们是在后台运行的。
 
一、如何编写精灵进程
1、首先调用fork,然后使父进程exit.
2、调用setsid以创建一个新的会话。
3、调用chdir将工作目录改为根目录。
4、将文件方式创建屏蔽字设为0.(umask(0);)
5、关闭不需要的文件描述字。
 
例子:
 

#include <syslog.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

int main()
{
    pid_t pid;
    if((pid = fork()) == 0)
    {
        setsid();
        chdir("/");
        umask(0);
        close(0);
        close(1);
        close(2);

        while(1)
        {
            sleep(1);
            syslog(LOG_USER, "hello world!\n");
        }
    }
    return 0;
}

 

二、出错记录

与精灵进程有关的最大的一个问题是如何处理出错信息。因为没有控制终端,所以不能写到标准出错输出上。svr4以及4.3+BSD都提供了对应的处理方式,详情可参见APUE第13章,这里只记录下4.3+BSD上的方法。

子从4.2+bsd以来,广泛地采用了BSD syslog设施。有三种方法产生记录消息:

  • 内核例程可以调用log函数。任何一个用户进程通过打开和读/dev/klog设备就可以读取这些消息。
  • 大多数用户进程(精灵进程)调用syslog函数以产生记录消息。这使消息发往UNIX域数据报套接口/dev/log
  • 进程还可以将数据发往消息记录主机的UDP端口514,这要求产生记录的进程显示地进行网络编程。

通常syslogd例程读取这三种形式的记录消息,此精灵进程读取/etc/syslog.conf配置文件,该文件决定了不同的消息发往何处。(openlog,syslog,closelog参见man手册)

三、/etc/syslog.conf语法

语法格式:

消息来源.紧急程度(tab这里必须空一个tab)处理方式

说明:

消息来源:如cron,dameon,kern,user......参见(man syslog.conf)

紧急程度:info,err,warn,crit......

处理方式:

  • 文件名(注意绝对路径),则写到该文件
  • @主机,发往指定主机的syslogd程序
  • /dev/konsole,发往本地机器屏幕上
  • *,发往所有用户终端
  • |程序,通过管道发往指定程序
阅读(2525) | 评论(0) | 转发(2) |
0

上一篇:进程关系

下一篇:互斥锁以及条件变量

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