当前位置: 首页 > news >正文

Linux编程3.8 进程-守护进程

  • 守护进程(daemon)是生存期长的一种进程。它们常常在系统引导装入时启动,在系统关闭时终止。
  • 所有守护进程都以超级用户(用户ID为0)的优先权运行。
  • 守护进程没有控制终端。
  • 守护进程的父进程都是init进程

1、 守护进程编程步骤

  • 使用umask将文件模式创建屏蔽字设为0
  • 调用fork,然后让父进程退出(exit)
  • 调用setsia创建一个新会话
  • 将当前工作目录更改为要目录
  • 关闭不需要的文件描述符

2、 守护进程出错处理

  • 由于守护进程完全脱离了控制终端,因此,不能像其它程序一样通过输出错误信息到控制台的方式来通知程序员。
  • 通常办法是使用syslog服务,将出错信息输入到“/val/log/slog”系统日志文件中去。
  • syslog是linux中的系统日志管理服务通过守护进程syslog来维护。

3、 syslog服务说明

  • opnelog函数用于打开系统日志服务的一个连接
  • syslog函数用于向日志文件中写入消息,在这里可以规定消息的优先级、消息的输出格式等。
  • closelog函数用于关闭系统日志服务的连接

4、 相关操作函数

1)、openlog函数

#include <syslog.h>void openlog(const char *ident, int option, int facility);
功能:打开一个到系统日志记录程序的连接。

参数

  • ident:要向每个消息加入的字符串,通常为程序的名称。
  • option
    • LOG_CONS 若日志消息不能通过发送到syslog,则将该消息写到控制台。
    • LOG_NDELAY 立即打开linux域数据报套招口到syslog守护进程,通常,在记录第一条消息之前,该套接口不打开。
    • LOG_PERROR 除将日志消息发送给syslog外,还将它写至stderrr.
    • LOG_PID 每条消息都包含进程ID,此选择项可供对每个请求都fork一个子进程的守护进程使用。
  • facility 指定记录消息的类型
标识说明
LOG_AUTH安全/授权消息
LOG_AUTHPRIV安全/授权消息(专用)
LOG_CRON时钟守护进程(CRON和at)
LOG_DAEMON系统守护进程,没有单独的设施值
LOG_FTP守护程序
LOG_KERN内核消息(这些消息不能从用户进程中生成)
LOG_LOCAL0 through LOG_LOCAL7保留供本地使用
LOG_LPR行式打印机子系统
LOG_MAIL邮件子系统
LOG_NEWS使用NET新闻子系统
LOG_SYSLOG由syslogd(8)内部生成的LOG_SYSLOG消息
LOG_USER(默认)通用用户级消息
LOG_UUCPUUCP子系统

2)、syslog和closelog函数

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

参数

PRIORITY:消息优先级
标识说明
LOG_EMERG紧急(系统不可使用,最高优先级)
LOG_ALERT必须立即修复的条件
LOG_CRIT临界条件(例如,硬设备出错)
LOG_ERR出错条件
LOG_WARNING警告条件
LOG_NOTICE正常,但重要的条件
LOG_INFO信息性消息
LOG_DEBUG调试排错消息(最低优先级)

5、示例代码

/*守护进程编程的5个步骤*/
//1、 创建屏蔽子为0
umask(0);
//2、 调用fork函数创建子进程,然后父进程退出
pid_t pid=fork();
if(pid>0) exit(0);
//3、 调用setsid函数创建一个新会话
setsid();
//4、 将当前工作目录更改为根目录
chdir("/");
//5、 关闭不需要的文件描述符
close(STDIN_FIENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);//打开日志
syslog(LOG_DEBUG,"write:%s \n",strerror(errno));

相关文章:

  • nodejs中使用@maxmind/geoip2-node 查询地理位置信息
  • MySQL的进阶使用方法
  • 3D开发工具HOOPS如何助力3D项目实现扩展现实技术?
  • Trait与生命周期
  • 学习vue3 第四章(reactive全家桶)
  • playwright自动化项目搭建
  • laravel(源码笔记)服务绑定和解析(依赖注入-反射,控制反转)
  • 【DFS+贪心】第十四届蓝桥杯省赛C++ B组《飞机降落》(C++)
  • wordpress给指定ID分类添加特定的字段
  • 【skimage包如何安装】
  • CentOS7使用Docker部署.net Webapi
  • python云上水果超市的设计与实现flask-django-php-nodejs
  • C/C++代码性能优化——数据结构和算法
  • 云手机为电商提供五大出海优势
  • 企业数字化转型:是竞争力的关键,还是行业炒作?
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 30秒的PHP代码片段(1)数组 - Array
  • css布局,左右固定中间自适应实现
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • express + mock 让前后台并行开发
  • Fastjson的基本使用方法大全
  • python_bomb----数据类型总结
  • Vue.js 移动端适配之 vw 解决方案
  • vue-cli在webpack的配置文件探究
  • windows-nginx-https-本地配置
  • 从setTimeout-setInterval看JS线程
  • 老板让我十分钟上手nx-admin
  • 如何选择开源的机器学习框架?
  • 实习面试笔记
  • 与 ConTeXt MkIV 官方文档的接驳
  • 智能网联汽车信息安全
  • #includecmath
  • #考研#计算机文化知识1(局域网及网络互联)
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2)Java 简介
  • (27)4.8 习题课
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (一)u-boot-nand.bin的下载
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)h264中avc和flv数据的解析
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .java 9 找不到符号_java找不到符号
  • .NET CLR基本术语
  • .net 提取注释生成API文档 帮助文档
  • .net 中viewstate的原理和使用
  • .net6使用Sejil可视化日志
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /*在DataTable中更新、删除数据*/
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)