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一下函数原型而得到。

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

#include<stdio.h> 
#include<stdlib.h> 
#include<sys/types.h> 
#include<sys/stat.h> 
#include<signal.h> 
#include<fcntl.h> 
#include <syslog.h> 
  
#define MAXF 10000 
int main() 
{ 
    int i,fd; 
    pid_t pid; 
  
          /*(1)openlog也可省略 http://yige.org/cpp/ */
         openlog("my_log",LOG_PID,LOG_DAEMON); 
  
    pid=fork();/*<1> 创建子进程,结束父进程*/ 
    if(pid<0) 
             perror("fork error!\n"); 
        else if(pid>0)/*父进程*/ 
        exit(0); 
  
      
    setsid();/*<2>创建会话期,进程成为新的会话组长和新的进程组长*/ 
    chdir("/");/*<3>更改当前工作目录*/ 
    umask(0);/*<4>设置文件权限*/ 
    for(i=1;i<MAXF;i++)/*<5>关闭文件描述符*/ 
    close(i); 
      
    /*每5秒,写入文件一次*/ 
  
    while(1) 
    { 
               /*(2) syslog写入/var/log/syslog 文件中*/ 
               syslog(LOG_ERR,"%s\n","****----open error----****\n"); 
        sleep(5); 
    } 
    
}
这时我们运行该程序之后,在/var/log/syslog文件中就可以看到这样的信息:****----open error----****。


相关文章

粤ICP备11097351号-1