Linux:守护进程解析、如何实现守护进程

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

1、守护进程:

守护进程也称精灵进程(Daemon),是运行在后台的⼀一种特殊进程。它独立于控制终端周期性地执行某种任务或等待处理某些发生的事件。守护进程是⼀一种很有用的进程。Linux的大多数服务器就是用守护进程实现的。比如,Internet服务器inetd,Web服务器httpd等。同时,守护进程完成许多系统任

 

务。比如,作业规划进程crond等。Linux系统启动时会启动很多系统服务进程,

 

这些系统服务进程没有控制终端,不能直接和用户交互。其它进程都是在用户

 

登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程不受用户登录注销的影响,它们一直在运行着。这种进程有⼀一个名称叫守护进程(Daemon)。

 

 

2、查看系统中的守护进程:

 

用ps axj命令查看系统中的进程(参数a表示不仅列当前用户的进程,也列

 

出所有其他用户的进程,参数x表示不仅列有控制终端的进程,也列出所有无控

 

制终端的进程,参数j表示列出与 作业控制相关的信息)。

 

凡是TPGID一栏写着-1的都是没有控制终端的进程,也就是守护进程。在

 

COMMAND一列用[] 括起来的 名字表示内核线程,这些线程在内核里创建,没

 

有用户空间代码,因此没有程序文件名和命令行, 通常采用以k开头的名字,表

 

示Kernel。init进程我们已经很熟悉了,udevd负责维护/dev目录下的 设备文

 

件,acpid负责电源管理,syslogd负责维护/var/log下的日志文件,可以看出,守护

 

进程通 常采用以d结尾的名字,表示Daemon。

 

 

3、自己实现守护进程:

(1)、调用umask将文件模式创建屏蔽字设置为0.

文件权限掩码是指屏蔽掉文件权限中的对应位,比如一个文件权限掩码是050它就屏蔽了文件拥有者得可读与可写权限,fork()创建的子进程会继承父进程的文件权限掩码,所以我们把文件权限掩码设为0,可以增加子进程的灵活性,使用umask(0) 即可。

(2)、调用fork,父进程退出(exit)。

原因:

1)如果该守护进程是作为一条简单的shell命令启动的,那么父进程终止使得shell认为该命令已经执行完毕。

2)保证子进程不是一个进程组的组长进程。

 

守护进程需要脱离shell终端,造成一种程序关闭的假象,所有的工作都在子进程中完成,创建子进程,父进程退出,会造成子进程成为一个孤儿进程,在linux中当系统发现一个孤儿进程,就会1号进程(init进程)收养它,这样子进程就变成init子进程了。代码如下:

                    &nbs

从OpenBSD-inetd到xinetd:一文搞懂Linux系统下Telnet服务的两种守护进程配置哲学 本文深入解析Linux系统中OpenBSD-inetd与xinetd两种超级守护进程的设计哲学与配置实践。通过对比Ubuntu 22.04和RHEL 8下的Telnet服务配置,揭示轻量级与功能完备性之间的权衡,帮助系统管理员根据需求选择最佳方案。 阅读详情

相关推荐

Linux系统编程学习笔记_005_进程间通信

管道,存储映射I/O,信号

qq_46167427的博客 583

linux 守护进程实现

linux 守护进程实现,fork实现和daemon

qq_51355375的博客 2128

Linux入门

VM CentOS7 1. 常用命令 Tab建自动补全,连续两次Tab,会给出操作提示 使用上下箭头快速调出曾经使用过的命令 使用clear命令或者Ctrl+l 快捷键实现清屏 如果出现乱码问题: //设置编码,追加到配置文件后面 echo 'LANG="en_US.UTF-8"' >> /etc/profile //重新加载一下文件 source /etc/profile ...

m0_61922004的博客 2210

pid、tpid的区别

Linux系统函数getpid获取的是进程描述符task_struct的tgid(thread group identifier),而pid(process identifier)是系统管理所有进程的id。 测试代码: #include #include int *thread(void *arg) { printf("thread pid = %d\n",(int)getpi

dean_gdp的专栏 4799

Linux系统进程的实现(深入理解Linux内核进程的整理)

linux内核进程相关的总结

qq_44843469的博客 894

对于Linux:进程间关系、守护进程、daemon的实现解析

本文详细讲解了Linux进程间关系与守护进程实现原理。首先介绍了进程组、会话和控制终端的层级关系,解释了普通进程依赖终端导致服务不稳定的问题。然后重点阐述了守护进程的5个实现步骤:忽略异常信号、创建子进程、建立新会话、切换工作目录、重定向输入输出。通过这5步改造,普通进程可脱离终端依赖,成为长期稳定运行的守护进程。文章还提供了守护进程管理技巧,包括查看、终止和日志记录方法,并总结了进程间关系的核心层级和守护进程的关键价值。最后强调实践的重要性,鼓励读者通过动手实践巩固这些底层知识。

2503_92929084的博客 173

深入解析Linux进程组、会话与控制终端:从进程管理到守护进程实现

本文系统阐述了Linux系统中进程组、会话与控制终端的核心概念及其相互关系。进程组将相关进程组织为协同单元,会话进一步聚合多个进程组,而控制终端则作为用户与进程交互的桥梁。文章详细分析了进程组生命周期、会话创建机制(如setsid)及终端信号传递原理,并深入探讨了Shell作业控制与前后台进程管理。最后,通过模拟daemon函数实现,完整展示了守护进程的创建步骤,揭示了其脱离终端、独立运行的关键技术,为理解Linux进程管理与系统服务部署提供了坚实基础。

祯的博客 797

《Socket编程实操全指南:从UDP/TCP实现守护进程深度解析》----《Hello Linux!》(23)

本文系统介绍了UDP网络编程的实现方法,包含服务端和客户端的完整代码示例。服务端通过socket创建UDP套接字,绑定指定端口,使用recvfrom接收客户端消息并维护在线用户列表,实现消息广播功能。客户端通过创建线程分别处理消息发送和接收,与服务端进行通信。文章详细解析了关键系统调用如socket、bind、recvfrom/sendto的使用方法,并提供了网络字节序转换、错误处理等实用技巧。通过代码实例展示了UDP协议的无连接特性及其在网络编程中的应用,帮助开发者掌握基础的网络通信实现原理。

刃神太酷啦的博客 1811

linux超级守护进程,Linux 超级守护进程 xinetd

在讲解xinetd之前,我们先要了解什么是守护进程守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业规划进程crond、...

weixin_39622084的博客 416

Linux 超级守护进程 xinetd

在讲解xinetd之前,我们先要了解什么是守护进程。     守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。守护进程常常在系统引导装入时启动,在系统关闭时终止。Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,同时,守护进程还能完成许多系统任务,例如,作业

GDUTLYP的专栏 993

Linux编程——守护进程(Daemon)

守护进程就是脱离终端、在后台长期运行、由init/systemd(即PID=1,是系统启动后第一个运行的进程,也是所有进程的祖先)来接管的特殊进程。脱离终端:守护进程不受终端得关闭和信号干扰。普通进程关联终端时,终端会关闭并且发送SIGHUP信号,默认终止进程;或者用户在终端Ctrl+C强制关闭进程。守护进程不受这些信号的干扰父进程为init/systemd(PID=1)——系统级进程:Linux启动后,第一个进程是init/systemd,PID固定为1,是所有进程的祖先进程。

weixin_53720710的博客 614

linux——守护进程

把一组有关联的进程打包成一个团队,方便统一管理(发信号、结束、调度)。比如:一条管道命令,两个进程默认在同一个进程组。进程组 = 一个班级组长 = 班长全班 ID = 班长学号老师发指令(信号)→ 全班都收到会话是最高层级,绑定一个控制终端(你打开的黑框终端)。:你登录终端→创建一个会话→所有执行的程序都挂在这个会话里。会话 = 整个年级终端 = 年级教室关教室(关终端)→ 年级里所有学生(进程)全赶走守护进程 = 转学出去,脱离教室,不关不停Linux 后台永久运行的服务进程。

weixin_64611877的博客 543

Linux网络编程】 Linux TCP网络编程:客户端开发+守护进程实战

基础的字节流通信没有统一格式,服务端无法解析复杂请求,因此需要搭建自定义请求协议,通过函数封装规范的请求字符串,让客户端和服务端的通信有统一标准。本篇基于手写笔记,从TCP客户端开发入手,讲解了连接成败的核心逻辑,然后通过自定义请求协议规范客户端与服务端的通信,最后重点实现了服务端守护进程化,同时吃透了Linux PID/PGID/会话、前后台进程的底层概念。客户端无需bind,失败退出、成功进入通信是核心准则;自定义协议是解决字节流通信无格式的关键,BuildRequestString封装规范请求。

欢迎来到我的博客,私信我可以一起交流技术 1606

守护进程】从进程组到守护进程——Linux 服务化的底层基石

本文将从进程组、会话、控制终端、作业控制四个基础概念出发,层层递进到守护进程实现原理,最后手写一个完整的 Daemon() 函数并将一个网络服务守护进程化。读完本文,你将能够:画出"终端→会话→进程组→进程"的层级关系图,解释 setsid 为什么必须由非组长进程调用,独立实现生产级的守护进程创建逻辑,并清楚地理解 Ctrl+C/Z/\ 分别影响了哪些进程。

2302_80243065的博客 581

Linux-守护进程 原理及模型分析,以及代码创建过程】请提前熟悉一下Linux“会话”

Linux守护进程(Daemon)是运行在后台的一种特殊进程,用于执行特定的系统任务或等待处理某些发生的事件。守护进程代码流程(如果第二点不清楚,一定要先去了解会话,守护进程是在会话的基础上建立的,守护进程的代码流程基本上是对会话原理的一个详细展开)日志记录对于故障排查和系统监控至关重要。守护进程管理:可以使用如systemctl、service或systemd命令来管理守护进程,如启动、停止、重启或查看状态。循环监听:守护进程在一个或多个循环中监听特定的事件,如网络端口、硬件中断或特定的文件。

m0_74824496的博客 23

Linux网络】守护进程

     在创建一个网络服务后,往往这个服务进程是一直运行的。但是对于大部分进程来说,如果退出终端,这个终端上创建的所有进程都会退出,这就导致进程的生命周期与终端绑定,如果终端退出,服务就无法继续运行了。为此,创建一个服务进程后,需要让其不在受到终端的影响,就算终端退出,进程依然执行,这种进程称为守护进程。进程组是一个或者多个进程的集合,这些进程都有同样的进程组ID(PGID),这个ID和PID类似,都是一个正整数,可以放在pid_t类型中。往往一个进程组内部的所有进程,要共同完成一个功能,这些进程之间可以

weixin_73914025的博客 156

Linux】进程间关系与守护进程详解:从进程组到作业控制到守护进程实现

本文系统讲解了Linux进程间关系与守护进程实现。主要内容包括:1)进程组的概念、生命周期与作用,说明进程组如何统一管理多个进程;2)会话的组织结构、创建方法(setsid)及会话ID;3)控制终端的作用及其与进程组的关系;4)守护进程实现原理,包括脱离控制终端、改变工作目录等关键步骤。通过理解进程组、会话和控制终端的关系,可以掌握Linux进程管理的核心机制,并实现可靠的守护进程

半截诗的博客~ 769

Linux网络】深入理解守护进程(Daemon)及其实现原理

我们都知道,进程拥有一个进程ID(PID)。PGID,这个代表就是进程组ID。代码语言:javascriptAI代码解释一个进程必然属于一个进程组。一个进程组中可以有一个 or 多个进程。上面我们谈到了进程组,会话其实与进程组紧密相关会话,是一个 or 多个进程组的集合!一个会话可以包含一个 or 多个进程组通常,我们使用管道将几个进程编成一个进程组。如上图中的进程组2、进程组3。代码语言:javascriptAI代码解释# &表⽰将进程组放在后台执⾏会话中第一个进程组,我们叫做:会话首进程。

2501_94114815的博客 211

守护进程深度解析:从原理到Systemd实战的完整指南

在操作系统和服务器运维中,进程管理是核心基础概念之一。进程作为程序执行的实例,其生命周期和运行模式直接决定了服务的可用性。其中,守护进程是一种特殊的后台进程,它脱离终端独立运行,持续提供系统或应用服务,其设计原理涉及进程组、会话、文件描述符管理等多个底层机制。这种技术模式的价值在于实现了服务与用户交互的解耦,保障了关键服务的持续可用性,是构建高可靠性系统架构的基石。其应用场景广泛,涵盖了系统服务(如sshd、crond)、网络服务(如Nginx、MySQL)、监控代理以及各类后台任务处理。本文聚焦于守护进程

weixin_34327761的博客 354
上一篇: 数据链路层差错检测:CRC(循环冗余检验)
下一篇: Linux:守护进程详解及实现
Sharp_UP
博客等级 码龄10年 86粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值