守护进程和inetd超级服务器
守护进程:
1 系统启动时,由系统初始化脚本启动。一般在/etc目录下,或者以/etc/rc开头的目录
2 许多网络服务器由inetd超级服务器启动
3 cron守护进程按规则定期执行一些程序
4 用at命令指定在将来的某一时刻执行程序。
守护进程输出消息,syslog函数,消息发往syslogd守护进程
syslogd守护进程:
1 读入配置文件,通常是/etc/syslog.conf。设定守护进程对接收每次键入的各种等级消息的处理。
2 创建一个unix域套接口,捆绑路径名/var/run/log
3 创建一个UDP套接口,给它捆绑端口514
4 打开路径名/dev/klog,内核中的所有出错消息作为这个设备的输入出现
void syslog(int priority,const char * message,...);
举例:
syslog(LOG_INFO|LOG_LOCAL2,"rename(%s,%s):%m",file1,file2);
%m:将当前的errno值得出错消息取代
在/etc/syslog.conf文件中进行设置
daemon_init函数:使一个进程编程守护进程
#include "unp.h" #include <syslog.h> #define MAXFD 64 extern int daemon_proc; void daemon_init(const char * pname,int facility){ int i; pid_t pid; if((pid = Fork())!=0) //调用fork,终止父进程,留下子进程继续运行。 exit(0); setid(); //创建一个新的登陆会话session Signal(SIGHUP,SIG_IGN); //忽略SGIHUP信号并在此调用fork if((pid=Fork())!=0) //确保将来即使打开一个终端设备,也不会自动获得控制终端。 exit(0); daemon_proc = 1; //非零时,出错处理函数将调用syslog函数取代fprintf输出到标准错误输出 chdir("/"); umask(0);//将工作目录改到根目录 for(i=0;i<MAXFD;i++) //关闭守护进程从运行开始打开的所有文件描述字 close(i); openlog(pname,LOG_PID,facility); }
inetd守护进程
/etc/inetd.conf配置超级服务器处理的服务
守护进程工作流程:
1 启动读/etc/inetd.conf文件,指定创建相应类型的套接口
2 调用bind,绑定众所周知的端口和通配地址
3 对TCP调用listen
4 调用select等待套接口变为可读
5 返回一个可读的套接口,如果是TCP套接口,就调用accept接受
6 调用fork,由子进程处理服务请求
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?