UNPv1第十二章:守护进程

守护进程(daemon)是在后台运行不受终端控制的进程。Unix系统中一般有很多守护进程在后台运行(20到50个),执行不同的管理任务

1.syslog函数

既然守护进程没有控制终端,它们就不能把消息fprintf到stderr上,从守护进程中登记消息的常用技巧就是调用syslog函数

#include <syslog.h>
void syslog(int priority, const char *message, ... );

priority参数是级别(level)和设施(facility)的组合
Level没有指定,就默认LOG_NOTICE。
Facility如果没有指定就默认LOG_USER

举例来说,当调用rename函数失败时,守护进程可能会做以下调用:
syslog(LOG_INFO | LOG_LOCAL2, “rename(%s, %s): %m”, file1, file2);

当应用程序第一次调用syslog时,它创建一个Unix域数据报套接口,然后调用connect连往syslogd守护进程建立的套机口的众所周知路径名(如 /var/run/log),这个套接口在进程终止前一直打开。另外,进程也可以调用openlog和closelog

#include <syslog.h>
void openlog(const char * ident, int options, int facility);
void closelog(void);

ident是一个字符串,它将被syslog加到每条登记消息的前面,一般情况下它的值为程序名
options参数有以下一个或多个常数“逻辑或”组成

2.inetd守护进程

我们在网络编程时会发现,开始的几步都是基本一样的,对于服务器这一端,我们会使用socket, bind, listen ,accept 基本步骤相同,能不能把这几步形成一个总的,当有申请链接来时都调用一个进程链接,然后根据不同的申请fork子进程执行相应的程序呢?答案就是只用inetd守护进程。概括来说:inetd是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求
inetd守护进程是Unix/Linux自己的,他作为一个守护进程,处理请求,我们要做的是给他提供当对于某种链接,某个接口的请求时所要启动的程序就可以了。

你可能感兴趣的:(UNPv1第十二章:守护进程)