Linux的守护进程


Linux #守护进程2012-11-16 09:57

守护进程有时也称为精灵进程是生存其较长的一种进程,这些进程没有与控制终端相关联,它们在系统启动的时候启动,在系统关闭的时候关闭。

我们知道,因为守护进程没有控制终端与其相关联,所以不能只是简单地将一些出错信息写到标准输出设备上。

通常使用的方法是调用syslog函数以产生日志消息。

调用该函数的顺序是:

#include<syslog.h>

void openlog(const char *ident,int option,int facility);打开syslog

void syslog(int priority,const char *format,...);写入syslog

void closelog(void);关闭syslog

int setlogmask(int maskpri);用于设置进程的记录优先级屏蔽字。

其参数的含义,大家可以通过man一下函数原型而得到。

下面给出一个具体的例子来说明这些函数的使用:

01#include<stdio.h>
02#include<stdlib.h>
03#include<sys/types.h>
04#include<sys/stat.h>
05#include<signal.h>
06#include<fcntl.h>
07#include <syslog.h>
08   
09#define MAXF 10000
10int main()
11{
12    int i,fd;
13    pid_t pid;
14   
15          /*(1)openlog也可省略 http://yige.org/cpp/ */
16         openlog("my_log",LOG_PID,LOG_DAEMON);
17   
18    pid=fork();/*<1> 创建子进程,结束父进程*/
19    if(pid<0)
20             perror("fork error!\n");
21        else if(pid>0)/*父进程*/
22        exit(0);
23   
24       
25    setsid();/*<2>创建会话期,进程成为新的会话组长和新的进程组长*/
26    chdir("/");/*<3>更改当前工作目录*/
27    umask(0);/*<4>设置文件权限*/
28    for(i=1;i<MAXF;i++)/*<5>关闭文件描述符*/
29    close(i);
30       
31    /*每5秒,写入文件一次*/
32   
33    while(1)
34    {
35               /*(2) syslog写入/var/log/syslog 文件中*/
36               syslog(LOG_ERR,"%s\n","****----open error----****\n");
37        sleep(5);
38    }
39     
40}
这时我们运行该程序之后,在/var/log/syslog文件中就可以看到这样的信息:****----open error----****。


相关文章

粤ICP备11097351号-1