UNIX网络编程---守护进程和inetd超级服务器

一、概述

守护进程是在后台运行且不于任何控制终端挂链的进程。UNIX系统有很多守护进程在后台工作(有20到50的数量级),执行不同的任务。守护进程没有控制终端通常源于它们由系统初始化脚本启动。然而守护进程也可能从某个终端由用户在shell提示符下键入命令行启动,这样的守护进程必须亲自脱离于控制终端的关联,从而避免与作业的控制、终端会话管理、终端产生信号等发生任何不期望的交互,也可以避免在后台运行的守护进程非预期低输出到终端。

守护进程有多重启动方法:

1)  在系统启动阶段,由系统初始化脚本启动

2)  有inetd超级服务器启动,inetd自身由上一条中的某个脚本启动。inetd监听网络请求,每当有一个请求到达时,启动相应的实际服务器。

3)  Cron守护进程按照规则定期执行一些程序,而由它启动执行的程序同样作为守护进程运行。其自身由某个脚本启动。

4)  at命令用于指定将来某个时刻的程序执行。这些程序的执行时刻到来时,通常有cron守护进程启动执行他们,因此这些程序同样作为守护进程运行。

5)  守护进程还可以行用户终端或在前台或在后台启动。这么做往往是为了测试守护程序或重启因某种原因而终止了的某个守护进程。

二、Syslogd守护进程

此守护进程通常由某个系统初始化脚本启动

1)  读取配置文件。通常为/etc/syslog.conf的配置文件指定本守护进程可能收取的各种日志消息应该如何处理。这些消息坑内被添加到一个文件/dev/console文件时一个特例,它把消息写到控制台上),或被写到指定用户的登录窗口,或被转发给另一个主机上的syslogd进程。

2)  创建一个UNIX域数据报套接字,给它捆绑路径名/var/run/log(有的是/dev/log)

3)  创建一个udp套接字,给他捆绑端口514(syslog服务使用的端口号)。

4)  打开路径名/dev/klog、来自内核中的任何出错消息看着像是这个设备的输入

此后syslogd守护进程在一个无限循环中进行,调用select以等到它的三个描述符(来自上述第2、3、4步)之一变为可读,读取日志消息,并按照配置文件进行处理。如果守护进程收到SIGHUP信号,那就是重新读取配置文件。

通过创建一个UNIX域数据报套接字,我们就可以从自己的守护进程中通过syslogd绑定的路径名发送我们的消息达到发送日志消息的目的。

三、Syslog函数

从守护进程中等级消息的常用技巧就是调用syslog函数

#include<syslog.h>

Void syslog(intpriority,const char *message,…..);

函数中的priority参数是级别和设施两者的组合,message参数类似printf的格式串,日志信息的level从0到7,按照东高到低的顺序排列的,默认情况为LOG_NOTICE

举例来说,当rename函数调用意外失败时,守护进程可以执行以下调用

Syslog(LOG_INFO|LOG_LOCAL2,”RENAME(%S,%S):%m”,file1,file2);

当syslog被应用进程首次调用时,它闯将一个UNIX域数据报套接字,然后调用connect连接到有syslogd守护进程创建的UNIX域数据报套接字的周所周知的路径名(譬如/var/run/log)

这个套接字一直保持打开,直到进程终止为止。进程也可以使用openlog和closelog

#include <syslog.h>

Void openlog(const char *ident,intoptions,int facility);

Void closelog(void);

Openlog可以在首次调用syslog前调用,closelog可以在应用进程不再需要发送日志消息时调用

Ident参数是一个有syslog冠于每个日志消息之前的字符串。它的值通常是程序名

Openlog被调用时,通常并不立即创建UNIX域套接字。该套接字直到首次调用syslog时才打开。LOG_NDELAD选项破事该套接字在openlog被调用时就创建。

四、Daemon_init函数

调用这个函数可以把普通进程转换为守护进程。但是在有的UNIX变体中已经更改了使用方法

五、Inetd守护进程

在TFTP、telnet/tftp这些服务来说,都会有一个进程与之关联。每个进程执行几乎相同的任务:创建一个套接字,把本地服务器的周所周知端口捆绑到该套接字,等待一个连接或一个数据报,然后派生子进程。子进程为客户提供服务,父进程则继续等到下一个客户请求

1)  所有这些守护进程含有几乎相同的启动代码,既表现在创建套接字上,也表现在演变成守护进程上。

2)  每个守护进程在进程表中占据一个表项,然而它们大部分时间处于睡眠状态,因特网超级服务器(既inetd守护进程)使上述问题得到简化。基于TCP或UDP的服务器都可以使用这个守护进程

六、Daemon_inetd函数

这个函数是自己编写的函数,代码很简单,在实际过程中基本不用

PS:

守护进程是在后台运行并独立于所有终端控制的进程。许多网络服务器作为守护进程运行。守护进程产生的所有输出通常通过调用syslog函数发生给syslogd守护进程。系统管理员可根据发送消息的守护进程以及消息的严重级别,完全控制这些消息的处理方式。

启动任意一个程序并让它作为守护进程运行需要以下步骤:调用fork以转到后台运行,调用setsid建立一个新的POSIX会话并成为会话头进程,再次fork以避免无意中获得新的控制终端,改变工作目录和文件创建模式掩码,最后关闭所有非必要的描述符,daemon_init函数处理所有这些细节‘

许多UNIX服务器有inetd守护进程启动,它处理全部守护进程化所需的步骤,当启动真正的服务器时,套接字已在标准输入、标准输出和标准错误输出上打开。这样我们无需调用socket、bind、listen和accept,因为这些步骤已有inetd处理。

UNIX网络编程---守护进程和inetd超级服务器(十三)相关推荐

  1. 守护进程和inetd超级服务器

    守护进程是在后台运行且不与任何控制终端关联的进程.既然守护进程没有控制终端,当有事情发生时,它们得有输出消息的某种方法,syslog函数是输出这些消息的标准方法,它把这些消息发送给syslogd守护进 ...

  2. 网编编程必看书籍:unix网络编程

    unix网络编程被誉为圣经,该书主要讲socket套接字相关,socket API,从底层剖析网络编程.网络编程中需要用到的一些经典函数,多路复用函数,这些都值得去反复学习研究. 目录: 录 Part ...

  3. 《Unix网络编程卷1:套接字联网API》读书笔记

    第一部分:简介和TCP/IP 第1章:简介 第2章:传输层:TCP.UDP和SCTP TCP:传输控制协议,复杂.可靠.面向连接协议 UDP:用户数据报协议,简单.不可靠.无连接协议 SCTP:流控制 ...

  4. UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订)...

    UNIX网络编程.卷1,套接字联网API(第3版)(中文版)(Stevens经典著作,两位顶级网络编程专家应邀执笔修订) 基本信息 原书名: Unix Network Programming, Vol ...

  5. 进程fork和exec ---Unix网络编程笔记

    进程fork和exec ---Unix网络编程笔记 fork 一次调用,两次返回 fork的两个典型用法 最简单的并发服务器---fork子进程 exec -Unix网络编程笔记) fork #inc ...

  6. 学习笔记(18):Python网络编程并发编程-守护进程

    立即学习:https://edu.csdn.net/course/play/24458/296429?utm_source=blogtoedu 守护进程(了解) 1.概念:守护进程是主进程在创建子进程 ...

  7. 守护进程和inetd(转)

    定义: 守护进程 daemon 是在后台运行不受终端控制的进程. 启动方法: 1.        很多守护进程是系统初始化脚本启动的,一般在/etc目录或者/etc/rc开头的目录 2.        ...

  8. 《Unix网络编程卷1-套接字联网API》第一个例子编译 不通过问题解决

    <Unix网络编程卷1-套接字联网API>是本好书. 但是第一个例子不是很好编译. 需要如下步骤: 本人机器CentOS 5.4 1.下载源码 unpv13e解压到任意目录 然后按其rea ...

  9. 8.Python基础学习笔记day8-正则表达式、网络编程、进程与线程

    8.Python基础学习笔记day8-正则表达式.网络编程.进程与线程 一.正则表达式 ''' 1. [1,2,3,4]中任意取3个元素排列: A43 = 4x3x2 = 24itertools.pe ...

  10. UNIX网络编程之旅-配置unp.h头文件环境

    最近在学习Unix网络编程(UNP),书中steven在处理网络编程时只用了一个#include "unp.h"  相当有个性并且也很便捷 于是我把第三版的源代码编译实现了这个过程 ...

最新文章

  1. R绘制边缘直方图、箱图(Marginal Histogram / Boxplot)
  2. 基于区块链的健康链系统设计与实现(1)引言
  3. 未来期间的过帐运行已申请(检查条目)
  4. 《系统集成项目管理工程师》必背100个知识点-81风险管理
  5. 分享cropper剪切单张图片demo
  6. excel实战应用案例100讲(六)-社会判断理论:模型及应用
  7. mysqlnavicat数据库备份与恢复_Navicat如何还原MySQL数据库
  8. 【python教程入门学习】Python 正则表达式
  9. 查看tensorflow版本以及路径:
  10. Java小项目:图片版坦克大战
  11. 微信小程序 点击复制文本到剪贴板
  12. 深度学习优化算法大全系列2: Momentum(动量)
  13. 国内外手机号码正则表达式(收藏)
  14. HP5100常见错误代码
  15. USB接口芯片的选型参考
  16. Android 使用Vector XML文件创建矢量图片资源
  17. android手机传感器,安卓手机传感器
  18. 光大银行监控平台实践,含详细工具及架构选型思路
  19. 『暗香记忆』十世成佛
  20. ch376inc.h

热门文章

  1. 我的文档 属性设置里找不到位置选项,以及目录迁移解决方案
  2. The CDB process terminated
  3. python输出边长为n的正方形_将一个正方形分成N个较小的正方形并求N个较小正方形的中心坐标...
  4. TQ2440之内核3.15.6移植
  5. Typora使用技巧
  6. Set Scrolling Pictrues in the WebPage
  7. IONIC Error“EPERM: operation not permitted, rename 'C:\Users\tad\.config\configstore\cordova-config”
  8. MonoJSG:联合语义和几何代价函数的单目3D目标检测(CVPR2022)
  9. python爬虫爬取博客_Python爬虫抓取csdn博客
  10. 事件绑定,事件类型,事件委托