Linux 守护进程
一 何为守护进程
- 长期运行。守护进程是一种生存期很长的一种进程,它们一般在系统启动时开始运行,除非强行终 止,否则直到系统关机都会保持运行。与守护进程相比,普通进程都是在用户登录或运行程序时创 建,在运行结束或用户注销时终止,但守护进程不受用户登录注销的影响,它们将会一直运行着、 直到系统关机。
- 与控制终端脱离。在 Linux 中,系统与用户交互的界面称为终端,每一个从终端开始运行的进程都 会依附于这个终端,这是上一小节给大家介绍的控制终端,也就是会话的控制终端。当控制终端被 关闭的时候,该会话就会退出,由控制终端运行的所有进程都会被终止,这使得普通进程都是和运 行该进程的终端相绑定的;但守护进程能突破这种限制,它脱离终端并且在后台运行,脱离终端的 目的是为了避免进程在运行的过程中的信息在终端显示并且进程也不会被任何终端所产生的信息 所打断。 守护进程是一种很有用的进程。Linux 中大多数服务器就是用守护进程实现的,譬如,Internet 服务器 inetd、Web 服务器 httpd 等。同时,守护进程完成许多系统任务,譬如作业规划进程 crond 等。 守护进程 Daemon,通常简称为 d,一般进程名后面带有 d 就表示它是一个守护进程。守护进程与终端 无任何关联,用户的登录与注销与守护进程无关、不受其影响,守护进程自成进程组、自成会话,即 pid=gid=sid。通过命令"ps -ajx"查看系统所有的进程,如下所示
二 编写守护进程程序
umask(user file-creatiopn mode mask)是linux中的一个命令,用于为用户文件创建权限掩码,语法“umask [-S][权限掩码]”;其中,“权限掩码”是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
/umask命令可确定要在创建的任何文件或者目录上设置的默认权限。umask命令为用户文件创建掩码,,是创建文件或文件夹时默认权限的基础。通常我们可以使用chmod修改linux中文件的权限.umask的作用与chmod的效果相反,具体看下面。
若没有文件掩码时,文件的默认权限为0666,文件夹的默认权限为0777。
三 示例
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>// 文件权限掩码 umask 用于对新建文件的权限位进行屏蔽,在 5.5.5 小节中有介绍。由于使用 fork 函数新
// 建的子进程继承了父进程的文件权限掩码,这就给子进程使用文件带来了诸多的麻烦。因此,把文件权限掩
// 码设置为 0,确保子进程有最大操作权限、这样可以大大增强该守护进程的灵活性。设置文件权限掩码的函
// 数是 umask,通常的使用方法为 umask(0)// umask(user file-creatiopn mode mask)是linux中的一个命令,用于为用户文件创建权限掩码,语法“umask [-S][权限掩码]”;其中,“权限掩码”是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。// umask命令可确定要在创建的任何文件或者目录上设置的默认权限。umask命令为用户文件创建掩码,,是创建文件或文件夹时默认权限的基础。通常我们可以使用chmod修改linux中文件的权限.umask的作用与chmod的效果相反,具体看下面。// 若没有文件掩码时,文件的默认权限为0666,文件夹的默认权限为0777。int main(void)
{pid_t pid;int i;/* 创建子进程 */pid = fork();if (0 > pid){perror("fork error");exit(-1);}else if (0 < pid) // 父进程exit(0); // 直接退出/**子进程*//* 1.创建新的会话、脱离控制终端 */if (0 > setsid()){perror("setsid error");exit(-1);}/* 2.设置当前工作目录为根目录 */if (0 > chdir("/")){perror("chdir error");exit(-1);}/* 3.重设文件权限掩码 umask */umask(0);/* 4.关闭所有文件描述符 */for (i = 0; i < sysconf(_SC_OPEN_MAX); i++)close(i);/* 5.将文件描述符号为 0、1、2 定位到/dev/null */open("/dev/null", O_RDWR);// 回到dup函数,这个函数有一个参数就是文件描述符, 这个函数创建出一个新的文件描述符,这个文件描述符与参数中的这个文件描述符指向同一个文件, 而且新的文件描述符总是取系统中最小的的整数值dup(0);dup(0);/* 6.忽略 SIGCHLD 信号 */signal(SIGCHLD, SIG_IGN);/* 正式进入到守护进程 */for (;;){sleep(1);puts("守护进程运行中......");}exit(0);
}
gcc -o daemon_process daemon_process.c
运行之后,没有任何打印信息输出,原因在于守护进程已经脱离了控制终端,它的打印信息并不会输出
显示到终端,在代码中已经将标准输入、输出以及错误重定位到了/dev/null,/dev/null 是一个黑洞文件,自然是看不到输出信息。
使用"ps -ajx"命令查看进程,如下所示:
3.1 文件重定向 dup2
上述文件重定向部分 也可用dup2实现
// 5、重定向0,1,2if ((fd == open("/dev/null", O_RDWR) != -1)) // fd == 3{dup2(fd, STDIN_FILENO);dup2(fd, STDOUT_FILENO);dup2(fd, STDERR_FILENO);// 6、关闭掉不需要的fdif (fd > STDERR_FILENO)close(fd);}
dup2(3, 2); 让2号文件描述符重定向到 log.txt,其实就是把原本3号描述符保存的地址拷贝到2号描述符的位置。、
例子:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>int main(){int fd = open("log.txt", O_CREAT | O_RDWR, 0644);if(fd < 0){perror("open");}dup2(fd, 1); // 文件重定向printf("newfd: hello, world\n"); // 向1号文件描述符写入内容const char* buf = "oldfd: hello, world\n";write(fd, buf, strlen(buf)); // 向原本的log.txt对应的文件描述符写入内容return 0;
}
3.2 如何输出守护进程log到固定文件
解决办法如下:我们在log.hpp打印日志文件那,用宏定义一个serverTcp.log文件。
利用open函数打开此文件,返回到logFd 利用dup2把标准输入,标准输出重定向到logFd文件
注意 输出实时性。
s y n c只是将所有修改过的块的缓存排入写队列,然后就返回,它并不等待实际I / O操作结束。 系统精灵进程(通常称为u p d a t e )一般每隔3 0秒调用一次s y n c函数。这就保证了定期刷新内 核的块缓存。命令s y n c ( 1 )也调用s y n c函数。
函数f s y n c只引用单个文件(由文件描述符f i l e d e s指定),它等待I / O结束,然后返回。f s y n c可/用于数据库这样的应用程序,它确保修改过的块立即写到磁盘上。比较一下f s y n c和O _ S Y N C标 志(见3 . 1 3节)。当调用f s y n c时,它更新文件的内容,而对于O _ S Y N C,则每次对文件调用w r i t e函数时就更新文件的内容。
fflush和fsync的联系和区别
[zz ] http://blog.chinaunix.net/u2/73874/showart_1421917.html1.提供者fflush是libc.a中提供的方法,fsync是系统提供的系统调用。2.原形fflush接受一个参数FILE *.fflush(FILE *);fsync接受的时一个Int型的文件描述符。fsync(int fd);3.功能fflush:是把C库中的缓冲调用write函数写到磁盘[其实是写到内核的缓冲区]。fsync:是把内核缓冲刷到磁盘上。
c库缓冲-----fflush---------〉内核缓冲--------fsync-----〉磁盘
相关文章:
Linux 守护进程
一 何为守护进程 守护进程( Daemon )也称为精灵进程,是运行在后台的一种特殊进程,它独立于控制终端并且周期性 地执行某种任务或等待处理某些事情的发生,主要表现为以下两个特点: 长期运行。守护进程是一…...
自动驾驶技术的基础知识
自动驾驶技术是现代汽车工业中的一项革命性发展,它正在改变着我们对交通和出行的理解。本文将介绍自动驾驶技术的基础知识,包括其概念、历史发展、分类以及关键技术要素。 1. 自动驾驶概念 自动驾驶是一种先进的交通技术,它允许汽车在没有人…...
解决:yarn 无法加载文件 “C:\Users\XXXXX\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本“ 的问题
1、问题描述: 报错的整体代码为: yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本 // 整体的报错代码为 : yarn : 无法加载文件 C:\Users\admin\AppData\Roaming\npm\yarn.ps1&…...
【JVM--StringTable字符串常量池】
文章目录 1. String 的基本特性2. 字符串拼接操作3. intern()的使用4. StringTable 的垃圾回收 1. String 的基本特性 String 声明为 final 的,不可被继承String 实现了 Serializable 接口:表示字符串是支持序列化的。String 实现了 Comparable 接口&am…...
Large Language Models Meet Knowledge Graphs to Answer Factoid Questions
本文是LLM系列文章,针对《Large Language Models Meet Knowledge Graphs to Answer Factoid Questions》的翻译。 大型语言模型与知识图谱相遇,回答虚假问题 摘要1 引言2 相关工作3 提出的方法4 实验设计5 结果与讨论6 结论 摘要 最近,有研…...
blender 之视频渲染(以三维重建path为例)
blender 之视频渲染(以三维重建path为例) 1.新建轨迹路径2.设置相机,使其按照path运动3.将相机视角对准物体4.修改帧率5.设置输出路径6.设置输出格式7.渲染 1.新建轨迹路径 新建轨迹 选中新建的BezierCycle,按住S,拖…...
leetcode做题笔记166. 分数到小数
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。 如果小数部分为循环小数,则将循环的部分括在括号内。 如果存在多个答案,只需返回 任意一个 。 对于所有给定的输入,保证 …...
Android Studio新建项目缓慢解决方案
关于Android Studio2022新建项目时下载依赖慢的解决方案 起因解决方案gradle下载慢解决方案kotlin依赖下载慢解决方案 结尾 起因 新建Android Studio项目时,常会因为网络问题导致部分依赖下载缓慢,其中gradle和kotlin最拖慢进度。 解决方案 gradle下载…...
AmdU (5-azidomethyl-2‘-deoxyuridine)的反应原理|59090-48-1
产品简介:叠氮甲基dU(AmdU)是一种核苷类化合物,它含有叠氮基团,这种结构特点使其在细胞学和生物学领域得到了广泛应用。与胸腺嘧啶核苷相似的结构,使得叠氮甲基dU(AmdU)能够被细胞聚…...
使用nvm安装多个node版本
github下载地址: Releases coreybutler/nvm-windows (github.com) 安装了 nvm(Node Version Manager)后,可以使用以下步骤安装第二个 Node.js 版本: 打开终端或命令提示符。 使用以下命令列出可用的 Node.js 版本: …...
基于springboot实现自习室预订系统的设计与实现项目【项目源码+论文说明】分享
基于springboot实现自习室预订系统的设计与实现演示 摘要 在网络高速发展的时代,众多的软件被开发出来,给学生带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,学院只能以学生为导向,所以自习…...
淘宝详情API接口
一、引言 随着互联网的快速发展和电子商务的广泛应用,淘宝作为中国最大的C2C电商平台,其提供的API接口在各种应用中发挥着越来越重要的作用。本文将详细介绍淘宝详情API接口的背景、定义、类型,以及在各种应用场景中的作用和优势,…...
充气膜结构的应用领域
由于充气膜结构具有丰富多彩的造型,优异的建筑特性、结构特性和适宜的经济性等其他传统建筑无法比拟的优势,因此备受人们青睐,被应用于工业、民用、军事等许多领域中,具有广阔的应用前景。 充气膜结构的主要应用领域包括ÿ…...
自动拟人对话机器人在客户服务方面起了什么作用?
在当今数字时代,企业不断寻求创新的方法来提升客户服务体验。随着科技的不断进步和消费者期望的提升,传统的客户服务方式逐渐无法满足现代消费者的需求。因此,许多企业正在积极探索利用新兴技术来改进客户服务,自动拟人对话机器人…...
检验检疫系统(LIS)源码:C# + MVC + SQLserver + Redis
LIS系统源码技术特点:采用.Net Core新的技术框架、DEV报表、前端js封装、分布式文件存储、分布式缓存等,支持LIS独立部署,Docker部署等多种方式。 技术架构:ASP.NET CORE 3.1 MVC SQLserver Redis等 开发语言:C…...
tcpdump(一)基础理论知识
一 抓包分析技术初探 说明: 本篇章跟tcp/ip的知识没有关系,只是讲解tcpdump工具背景补充: 抓包是做报文分析的第一步敬畏心: 隔行如隔山,不要想当然 ① 背景 ② 抓包技术名词 1、捋顺这些技术的来龙去脉甚至八卦;2、这样我们在后续课程…...
一种重要的天然氨基酸L-Homopropargylglycine(HPG)|CAS:942518-19-6
产品简介:L-Homopropargylglycine是一种重要的天然氨基酸,具有多种生物活性和医学应用价值。它广泛应用于生物学、药学、化学等多个领域。在生物学中,HPG被用作蛋白质合成的标记物,可以通过其特殊的化学反应与蛋白质中的半胱氨酸残…...
uniapp快速入门系列(3)- CSS技巧与布局
章节二:CSS技巧与布局 1. uniapp中的样式编写2. 常见布局技巧与实例解析2.1 水平居中布局2.2 垂直居中布局2.3 等高布局2.4 响应式布局 3. CSS动画与过渡效果 在uniapp中,我们使用CSS来设置页面的样式和布局。本章将介绍一些在uniapp中常用的CSS技巧和布…...
NCNN:备忘
1:NCNN中Mat与CV中Mat的区别 ncnn中Mat数据的排列格式为(channel, h, w):bbbb....gggg.....rrrr opencv中Mat中数据的排列格式为(h, w, channel):bgrbgrbgrbgr... 2:NCNN::Mat的内存排布(图解)力荐 参考…...
用Python简单的实现一下六大主流小说平台小说下载(附源码)
很多小伙伴学习Python的初衷就是为了爬取小说,方便又快捷~ 辣么今天咱们来分享6个主流小说平台的爬取教程~ 一、流程步骤 流程基本都差不多,只是看网站具体加密反爬,咱们再进行解密。 实现爬虫的第一步? 1、去抓包分析,分析数…...
c++模板库容器list vector map set操作和性能对比
文章目录 listvectormapset性能比较总结 list 列表(list)是C STL中的一种容器类型,它是一个双向链表,可以在任意位置高效地添加、删除、移动元素。 以下是一些常用的列表操作: 创建列表 #include <list> std…...
windows服务添加 nginx 开机自启
软件下载 将下载的压缩包解压后得到nssm.exe。 安装nginx为服务 我们直接打开cmd执行: nssm install 即可...
【Redis】redis的特性和使用场景
Redis的特性 速度快基于键值对的数据结构服务器丰富的功能简单稳定客⼾端语⾔多持久化主从复制⾼可⽤(HighAvailability)和分布式(Distributed) 速度快 Redis 执⾏命令的速度⾮常快。 Redis 的所有数据都是存放在内存中的&…...
opengauss数据备份(docker中备份)
首先如果想直接在宿主机上进行使用gs_dump备份需要glibc的版本到2.34及以上,查看版本命令为 ldd --version 如图所示,本宿主机并不满足要求,所以转向在docker容器中进行备份, 然后进入opengauss容器中,命令为 docker…...
WebKit Inside: CSS 样式表的解析
CSS 全称为层叠样式表(Cascading Style Sheet),用来定义 HTML 文件最终显示的外观。 为了理解 CSS 的加载与解析,需要对 CSS 样式表的组成,尤其是 CSS Selector 有所了解,相关部分可以参看这里。 HTML 文件里面引入 CSS 样式表有 …...
javaee之Elasticsearch相关知识
简单说一下Elasticsearch相关知识 其余的参考官网文档 我们还可以用下面的方式来查 看一下原始索引库的模板 下面看一下数据库映射关系 下面就是更改了id1的所有数据 下面是我索引库中的内容 说一下查询之后,一些属性的含义 上面案例是这样理解的 match查询类型会对…...
【SpringCloud】微服务技术栈入门3 - Gateway快速上手
目录 GatewayWebFlux网关基本配置过滤器与断言工厂全局过滤器跨域处理 CORS Gateway WebFlux gateway 基于 webflux 构建 WebFlux 是基于反应式流概念的响应式编程框架,用于构建异步非阻塞的 Web 应用程序。它支持响应式编程范式,并提供了一种响应式的方…...
《理解深度学习》2023最新版本+习题答案册pdf
刚入门深度学习或者觉得学起来很困难的同学看过来了,今天分享的这本深度学习教科书绝对适合你。 就是这本已在外网获13.1万次下载的宝藏教科书《理解深度学习》。本书由巴斯大学计算机科学教授Simon J.D. Prince撰写,全书共541页,目前共有21…...
课题学习(五)----阅读论文《抗差自适应滤波的导向钻具动态姿态测量方法》
一、简介 抗差自适应滤波:利用等价权函数和自适应因子合理的分配信息,有效地滤除钻具振动对动态姿态测量的影响。、 针对导向钻井工具动态测量受钻具振动的影响而导致测量不准确的问题,提出一种抗差自适应滤波的动态空间姿态测量方法。通…...
一个CPU是怎么寻址的?
目录 CISC vs RISC 概念和历史 CISC vs RISC 对比举例:X86的CAS(做原子操作的) 对比举例:ARM的CAS(做原子操作的) 指令寻址 指令中的操作数的寻址方式 各语言对象内存布局对比 C内存布局 理解编译单元 Java对象内存布局 python对象模型 CPU …...
网站建设代码流程/如何开网店
写在前面:一名有三年Android开发经验的女程序员(欢迎大家关注我 ~期待和大家一起交流和学习Android的相关知识)这篇文章主要是和大家分享关于Android布局优化和代码优化的一些建议,希望能对大家有所帮助,以及促进和大家…...
wordpress企业建站教程 百度 下载/搜索引擎营销的英文简称
直奔主题 题目源自leetcode,题目编号0001 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一…...
中企动力做的网站经常打不开/如何做网址
小白学Pytorch系列-- Torch API (6) Reduction Ops argmax 返回输入张量中所有元素的最大值的索引。 >>> a torch.randn(4, 4) >>> a tensor([[ 1.3398, 0.2663, -0.2686, 0.2450],[-0.7401, -0.8805, -0.3402, -1.1936],[ 0.4907, -1.3948, -1.0691,…...
网站建设最关键的两个素材/商丘seo公司
求职?择业?跳槽?职业规划? 作为一名初出茅庐的软件测试员,职业发展的道路的确蜿蜒曲折,面对一次次的岗位竞争,挑战一道道的面试关卡,一边带着疑惑,一边又要做出选择&…...
好的做淘宝详情页的网站有哪些内容/seo研究中心vip教程
昨天下午道哥在微信上丢给我一条新闻,看看,我们阿里云支持 Docker 企业版了。我打开一看,果然,阿里云发布了飞天敏捷版,开始支持企业级的 Docker 容器。 美国中部时间4月19日,阿里云在容器技术大会 DockerC…...
太原商城网站建设/国外域名注册平台
1. 禁止MySql以管理员账号权限运行MySql应该使用非管理员账号运行,以普通账户安全运行mysqld加固方法:在my.cnf配置文件中配置usermysql2. 设置root用户口令并修改登录名,且不存在空密码账户修改root用户密码,在MySql控制台中执行…...