守护进程工作原理和方式
linux系统编程之进程(八):守护进程详解及创建,daemon()使用

linux系统编程之进程(⼋):守护进程详解及创建,daemon()使⽤⼀,守护进程概述Linux Daemon(守护进程)是运⾏在后台的⼀种特殊进程。
它独⽴于控制终端并且周期性地执⾏某种任务或等待处理某些发⽣的事件。
它不需要⽤户输⼊就能运⾏⽽且提供某种服务,不是对整个系统就是对某个⽤户程序提供服务。
Linux系统的⼤多数服务器就是通过守护进程实现的。
常见的守护进程包括系统⽇志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等。
守护进程⼀般在系统启动时开始运⾏,除⾮强⾏终⽌,否则直到系统关机都保持运⾏。
守护进程经常以超级⽤户(root)权限运⾏,因为它们要使⽤特殊的端⼝(1-1024)或访问某些特殊的资源。
⼀个守护进程的⽗进程是init进程,因为它真正的⽗进程在fork出⼦进程后就先于⼦进程exit退出了,所以它是⼀个由init继承的孤⼉进程。
守护进程是⾮交互式程序,没有控制终端,所以任何输出,⽆论是向标准输出设备stdout还是标准出错设备stderr的输出都需要特殊处理。
守护进程的名称通常以d结尾,⽐如sshd、xinetd、crond等⼆,创建守护进程步骤⾸先我们要了解⼀些基本概念:进程组:每个进程也属于⼀个进程组每个进程主都有⼀个进程组号,该号等于该进程组组长的PID号 .⼀个进程只能为它⾃⼰或⼦进程设置进程组ID号会话期:会话期(session)是⼀个或多个进程组的集合。
setsid()函数可以建⽴⼀个对话期:如果,调⽤setsid的进程不是⼀个进程组的组长,此函数创建⼀个新的会话期。
(1)此进程变成该对话期的⾸进程(2)此进程变成⼀个新进程组的组长进程。
(3)此进程没有控制终端,如果在调⽤setsid前,该进程有控制终端,那么与该终端的联系被解除。
如果该进程是⼀个进程组的组长,此函数返回错误。
(4)为了保证这⼀点,我们先调⽤fork()然后exit(),此时只有⼦进程在运⾏现在我们来给出创建守护进程所需步骤:编写守护进程的⼀般步骤步骤:(1)在⽗进程中执⾏fork并exit推出;(2)在⼦进程中调⽤setsid函数创建新的会话;(3)在⼦进程中调⽤chdir函数,让根⽬录 ”/” 成为⼦进程的⼯作⽬录;(4)在⼦进程中调⽤umask函数,设置进程的umask为0;(5)在⼦进程中关闭任何不需要的⽂件描述符说明:1. 在后台运⾏。
UNIX系统开发-守护进程

UNIX系统开发-守护进程守护进程(Demons)是在后台运行而有无终端或者登录shell和它结合在一起的进程。
有许多标准的守护进程,其中的一些周期地运行来完成特定的任务(像atrun,典型地由cron每五分钟执行一次),而其余的则连续地运行,等待处理某些特定的事件(像inetd和lpd)。
1.原理有几种启动守护进程的方法。
最常用的是:在引导系统时启动。
在这时运行的守护进程通常在系统启动script的执行周期间被启动。
这些script典型地被存放在目录/etc/rc.d中。
手工地,从shell提示符启动.对任何具有相应的执行权限的用户可以用这种方法启动守护进程由crond守护进程启动。
这个程序查询通常存放在/var/spool/crontabs目录中的一组文件,它们规定了要执行的周期性任务由执行at命令启动。
这将使一个程序在规定的日期和时间执行一次。
为了做到完全稳定可靠,一个守护进程应该能够在所有的这些方式下被正确地执行。
唯一问题是其中的一些启动方法使守护进程处于一种脆弱状态。
它可能受到在它运行之前为它设置的环境的影响。
你将要写的将普通程序转换成守护程序的大部分代码将涉及到把你的程序与这些环境影响隔离开。
除此之外,准备作为守护进程使用的程序通常必须比普通的用户程序更可靠。
你常常需要这样去编写程序,使得当它作为守护程序运行时,即使出现各种类型的系统错误,也不至于引起程序的崩溃。
2.实践在启动守护进程的过程中,包含了比你能想象的更多的步骤,虽然它们全部可能只用极少的代码去完成。
本节的其余部分将逐步介绍这一过程的更重要的方面。
2.1 关闭文件描述符第一项任务是关闭所有不必要的文件描述符。
如果你的守护进程留下一个普通文件处于打开状态,这将阻止该文件被任何其他进程从文件系统中删除。
它也阻止包含该打开文件的已装配的文件系统被卸下。
在终端文件(通常是stdin,stdout和stderr)的情况下,关闭不必要的连接更加重要。
详解Linux中的守护进程

详解Linux中的守护进程⼀、什么是守护进程Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和⽤户交互。
其它进程都是在⽤户登录或运⾏程序时创建,在运⾏结束或⽤户注销时终⽌,但系统服务进程不受⽤户登录注销的影响,它们⼀直在运⾏着。
这种进程叫守护进程。
守护进程也被称为精灵进程,是运⾏在后台的⼀种特殊进程,它独⽴于控制终端并且周期性地执⾏某种任务或等待处理某些发⽣的事件。
查看⽅式ps axj命令:查看系统中的进程。
参数a表⽰不仅列当前⽤户的进程,也列出所有其他⽤户的进程;参数x表⽰不仅列有控制终端的进程,也列出所有⽆控制终端的进程;参数j表⽰列出与作业控制相关的信息;⼆、守护进程的调⽤创建守护进程最关键的⼀步是调⽤setsid函数创建⼀个新的会话,并成为会话leader。
该函数调⽤成功时返回新创建的Session的id(其实也就是当前进程的id),出错返回-1。
注意,调⽤这个函数之前,当前进程不允许是进程组的Leader,否则该函数返回-1。
要保证当前进程不是进程组的Leader也很容易,只要先fork再调⽤setsid就⾏了。
fork创建的⼦进程和⽗进程在同⼀个进程组中,进程组的Leader必然是该组的第⼀个进程,所以⼦进程不可能是该组的第⼀进程,在⼦进程中调⽤setsid就不会有问题了。
成功创建并调⽤⼀个守护进程的标志是:1、成功新建⼀个会话,当前进程成为该会话的leader,该会话的ID为当前进程的ID;2、成功新建⼀个新的进程组,并且成为该组的组长,该进程组的组id即为当前进程的id;3、如果当前进程有⼀个控制终端,那么当前进程失去这个控制终端,成为⼀个⽆控制终端的进程;所谓失去控制终端是指,原来的控制终端仍然是打开的,仍然可以读写,但只是⼀个普通的打开⽂件⽽不是控制终端了。
三、守护进程的创建1、使⽤umask将⽂件模式创建屏蔽字设置为0;2、调⽤fork(),⽗进程退出(exit)。
守护进程工作原理和方式

xinetd模式
对于系统所要通过的每一种服务,都必须 运行一个监听某个端口连接所发生
的守护进程,这通常意味着资源浪费。为 了解决这个问题,Linux引进了“网络守护 进程服务程序”的概念。Redhat Linux 9.0使 用的网络守护进程是xinted(eXtended InterNET daemon)。
服务器监听(Listen)在一个特点的端口上 等待客户端的联
机。如果客户端产生一个连接请求,守护 进程就创建(Fork)一个子服务器响应这个 连接,而主服务器继
续监听。以保持多个子服务器池等待下一 个客户端请求。
工作在stand-alone模式下的网络服务有 route、gated。另外是大家最熟悉是Web服务 器:Apache\vsftpd和邮件服务器Sendmail、 域名服务器Bind。因为这些负载很大服务器 上,预先创子服务器,可以通过客户的服 务速度。在Linux系统中通过stand-alone工 作模式启动的服务由/etc/rc.d/下面对应的 运行级别当中的符
和stand-alone工作模式相比,系统不想要 每一个网络服务进程都监听其服务端口。 运行单个xinetd就可以同时监听所有服务端 口,这样就降低了系统开销,保护系统资 源。但是对于访问量大、经常出现并发访
问时,xinetd想要频繁启动对应的网络服务 进程,反而会导致系统性能下降。
pstree命令可以看到两种不同方式启动的网
络服务。一般来说系统一些负载高的服务: sendmail、Apache服务是单独启动的。而其 他服务类型都可以使用xinetd超级服务器管
理。查看目前运行的守护进程可以使用命 令:“pstree”
பைடு நூலகம்
和stand-alone模式相比xinted模式也称 Internet Super-Server(超级服务器)。 xinetd能够同时监听多个指定的端口,在接 受用户请求时,他能够根据用户请求的端 口不同,启动不同的网络服务进程来处理 这些用户请求。
守护进程架构设计

守护进程架构设计守护进程听起来就很神秘又很厉害的样子呢。
它就像一个默默守护城堡的小卫士,一直在后台运行,确保系统的某些功能能够正常运转。
一、守护进程是啥呀。
守护进程简单来说,就是在后台运行,不与用户直接交互的进程。
它就像一个低调的幕后英雄,你可能看不到它的存在,但是它却在为整个系统的稳定和顺畅做着巨大的贡献。
比如说,在服务器上,守护进程可能负责监控网络连接,一旦有新的连接请求过来,它就得赶紧去处理,就像一个超级热心的招待员,虽然你看不到它在忙前忙后,但是它的工作成果你是能感受到的,像网络一直保持通畅之类的。
二、守护进程的架构。
守护进程的架构有点像一个精心搭建的小王国。
1. 启动部分。
这个就像是王国的大门开启仪式。
守护进程启动的时候,它得知道自己是为啥而存在的。
是要监控文件的变化呢,还是要管理网络通信呀?这就像是它的使命被确定下来。
在启动的过程中,它要做很多准备工作,就像一个要出门远行的人,得检查自己的背包(各种资源的初始化),看看有没有带齐东西。
而且启动的时候还要考虑到和其他进程或者系统组件的关系,不能一上来就乱抢资源,得有礼貌,要和大家和谐共处。
2. 运行核心。
这是守护进程的心脏地带。
这里它要做的事情可多啦。
如果是监控文件的守护进程,那它就得不停地查看文件有没有被修改、被删除或者被新增。
它就像一个超级警惕的小侦探,眼睛一刻也不离开目标。
在运行核心部分,还得处理各种异常情况。
比如说突然文件打不开了,或者网络中断了,它可不能就傻在那里,得有应对的策略。
就像你在路上突然遇到一个大坑,你得想办法绕过去或者把坑填平一样。
3. 通信机制。
守护进程不能自己闷头干活,它有时候得和其他进程或者系统的部分说说话呢。
这个通信机制就像是它的传声筒。
可能是通过共享内存,就像大家共用一个小黑板来传递信息;也可能是通过消息队列,就像排队传递纸条一样。
这样它就能知道系统的其他部分在干啥,也能告诉别人自己这边的情况。
三、设计守护进程架构要注意的点。
第八单元守护进程和inetd超级服务器

7
syslogd守护进程
• 由于守护进程没有控制终端,在发生问题时它要 用一些其它方式以输出消息。
– 可以通过向文件里写数据来输出消息,但这样不好管 理,因为每一个守护进程要对应一个文件。
• syslogd守护进程作用
– 接收系统或用户守护进程的输出消息,并根据 配置信息作出相应处理。
syslogd守护进程启动过程
14
syslog-priority-facility——消息来 源
– – – – – – – – – – – LOG_AUTH 安全/授权消息 LOG_CRON 时间守护进程(cron and at) LOG_FTP ftp守护进程 LOG_KERN 内核消息 LOG_LOCAL0 到LOG_LOCAL7 LOG_LOCAL7 本地使用 LOG_LPR 行式打印机 LOG_MAIL 邮件系统 LOG_NEWS 网络新闻系统 LOG_SYSLOG syslogd内部消息 LOG_USER 任意的用户消息(默认) LOG_UUCP UUCP消息
10
浅析/etc/syslogd.conf——2
• syslogd.conf文件保存syslogd对消息的处理方式, 每行由消息类型和处理方案组成。
– 消息类型
• 由消息来源和紧急程度构成,中间用点号连接。
– 处理方案:
• 存硬盘,或转发到另一机器,或显示在终端上。 • 处理方案一览:
– – – – 文件名:写入某个文件,要注意绝对路径。 @ 主机名或IP:转发给另外一台主机的syslogd 程序。 /dev/console:发送到本地机器屏幕上。 *:发送到所有用户的终端上。
Linux网络编程
第八单元 守护进程和inetd超级服务器
操作系统实验报告07—守护进程
《计算机操作系统》实验报告
实验序号:06 实验项目名称:守护进程的创建
18数科1 学号姓名专业、班
实验地点指导教师实验时间2020/6/3
一、实验目的及要求
1. 掌握Linux系统下守护进程的创建方法。
2. 掌握编写守护进程的五个基本步骤。
二、实验基本原理(守护进程相关知识)
三、实验内容与步骤
创建一个守护进程,并利用该进程每20秒向daemon.log日志文件中写入当前时间,当守护进程收到kill命令后退出。
四、实验步骤
1)创建守护进程;
2)在root用户下,利用ps查看守护进程;
3)查看日志文件内容;
4)退出(即关闭)守护进程。
5)再次利用ps命令查看守护进程关闭结果。
五、截图
六、代码
七、教师评语
签名:
日期:成绩。
守护进程详解
守护进程详解
基本概念
⼀种长期运⾏的进程:这种进程在后台运⾏,并且不跟任何的控制终端关联
特点
⽣存期长[不是必须,但⼀般应该这样做],⼀般是操作系统启动的时候他就启动,操作系统关闭的时候他才关闭
守护进程跟终端⽆关联,也就是说他们没有控制终端,所以你控制终端退出,也不会导致守护进程退出
守护进程是在后台运⾏,不会占着终端,终端可以执⾏其他命令
Linux 常见守护进程
ppid = 0:内核进程,跟随系统启动⽽启动,声明周期贯穿整个系统
内核守护进程:cmd列名字带[]这种
init:也是系统守护进程
⽤户级守护进程:cmd列中名字不带[]的普通守护进程
共同点:
⼤多数守护进程都是以超级⽤户特权运⾏的
守护进程没有控制终端,TT这列显⽰? 其中,内核守护进程以⽆控制终端⽅式启动,普通守护进程可能是守护进程调⽤了setsid的结果(⽆控制端)
实现⽅式
调⽤umask(0),其⽤来限制(屏蔽)⼀些⽂件权限的
fork()⼀个⼦进程(脱离终端)出来,然后⽗进程退出(把终端空出来,不让终端卡住)。
以此来调⽤setsid(),⼦进程有单独的sid;⽽且⼦进程也成为了⼀个新进程组的组长进程;同时,⼦进程不关联任何终端了
输⼊输出重定向到/dev/null
}。
守护进程
一、什么是守护进程?守护进程是脱离于终端并且在后台运行的进程。
(1)守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示(2)并且进程也不会被任何终端所产生的终端信息所打断。
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程。
它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
守护进程常常在系统引导装入时启动,在系统关闭时终止。
Linux系统有很多守护进程,大多数服务都是通过守护进程实现的,例如web服务。
守护进程最大的特点是运行在后台,与终端无连接,除非特殊情况下,用户不能操作守护进程。
由于在Linux中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。
但是守护进程却能够突破这种限制,它从被执行开始运转,直到整个系统关闭时才退出。
如果想让某个进程不因为用户或终端或其他地变化而受到影响,那么就必须把这个进程变成一个守护进程。
二、守护进程的特性守护进程最重要的特性是后台运行。
其次,守护进程必须与其运行前的环境隔离开来。
这些环境包括未关闭的文件描述符,控制终端,会话周期和进程组,工作目录以及文件创建掩模等。
这些环境通常是守护进程从执行它的父进程(特别是shell)中继承下来的。
最后,守护进程的启动方式有其特殊之处。
它可以在Linux系统启动时从启动脚本/etc/r c.d中启动,可以由作业规划进程crond启动,还可以由用户终端(通常是shell)执行。
总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。
因此,编写守护进程实际上是把一个普通进程按照上述的守护进程的特性改造成为守护进程。
三、进程后台运行与守护进程的区别当进程处在后台运行时,关闭终端,则会将进程关闭;但是当关闭终端时,守护进程继续运行。
linux之进程基础(七)、守护进程、进程组等概念
linux之进程基础(七)、守护进程、进程组等概念7. 守护进程、进程组等概念7.1 守护进程特点运⾏⽅式守护进程,也就是通常所说的Daemon进程,是Linux中的后台服务进程。
周期性的执⾏某种任务或等待处理某些发⽣的事件。
Linux系统有很多守护进程,⼤多数服务都是⽤守护进程实现的。
⽐如:像我们的tftp,samba,nfs等相关服务。
同时Linux的⼤多数服务器就是⽤守护进程实现的。
⽐如,Internet服务器inetd,Web服务器httpd等。
⽣命周期守护进程会长时间运⾏,常常在系统启动时就开始运⾏,直到系统关闭时才终⽌守护进程不依赖于终端显⽽异见,从终端开始运⾏的进程都会依附于这个终端,这个终端称为这些进程的控制终端。
当控制终端被关闭时,相应的进程都会被⾃动关闭。
咱们平常写进程时,⼀个死循环程序关闭终端的同时也关闭了我们的程序,但是对于守护进程来说,其⽣命周期守护需要突破这种限制,它从开始运⾏,直到整个系统关闭才会退出,所以守护进程不能依赖于终端。
守护进程的⽗进程为init 进程7.2 查看守护进程7.2.1 查看命令:ps -ajx-a: 显⽰所有-x:显⽰没有控制终端的进程-j:显⽰与作业有关的信息(显⽰的列):会话期ID(SID),进程组ID(PGID),控制终端(TTY),终端进程组ID(TRGID)7.2.2 识别守护进程输⼊ps -ajx 命令后所有的守护进程都是以超级⽤户启动的(UID为0);没有控制终端(TTY为?);终端进程组ID为-1(TPGID表⽰终端进程组ID,该值表⽰与控制终端相关的前台进程组,如果未和任何终端相关,其值为-1;所有的守护进程的⽗进程都为init进程(PID为1的进程)。
例如:cron 进程就是⼀个守护进程7.3 与进程相关的⼀些概念7.3. 1 进程组进程组是⼀个或多个进程的集合。
进程组由进程组ID(PGID)来唯⼀标识。
每个进程组都有⼀个组长进程,进程组ID就是组长进程的进程号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
和stand-alone工作模式相比,系统不想要 stand-alone工作模式相比,系统不想要 每一个网络服务进程都监听其服务端口. 运行单个xinetd就可以同时监听所有服务端 运行单个xinetd就可以同时监听所有服务端 口,这样就降低了系统开销,保护系统资 源.但是对于访问量大,经常出现并发访 问时,xinetd想要频繁启动对应的网络服务 问时,xinetd想要频繁启动对应的网络服务 进程,反而会导致系统性能下降.
工作在stand-alone模式下的网络服务有 工作在stand-alone模式下的网络服务有 route,gated.另外是大家最熟悉是Web服务 route,gated.另外是大家最熟悉是Web服务 器:Apache\vsftpd和邮件服务器Sendmail, 器:Apache\vsftpd和邮件服务器Sendmail, 域名服务器Bind.因为这些负载很大服务器 域名服务器Bind.因为这些负载很大服务器 上,预先创子服务器,可以通过客户的服 务速度.在Linux系统中通过stand-alone工 务速度.在Linux系统中通过stand-alone工 作模式启动的服务由/etc/rc.d/下面对应的 作模式启动的服务由/etc/rc.d/下面对应的 运行级别当中的符 号链接启动.
xinetd模式 xinetd模式
对于系统所要通过的每一种服务,都必须 运行一个监听某个端口连接所发生 的守护进程,这通常意味着资源浪费.为 了解决这个问题,Linux引进了" 了解决这个问题,Linux引进了"网络守护 进程服务程序"的概念.Redhat 进程服务程序"的概念.Redhat Linux 9.0使 9.0使 用的网络守护进程是xinted( 用的网络守护进程是xinted(eXtended InterNET daemon). daemon).
�
守护进程工作方式: 守护进程工作方式:
(1)运行独立的守护进程 独立运行的守护进程由init脚本负责管理, 独立运行的守护进程由init脚本负责管理, 所有独立运行的守护进程的脚本在 /etc/rc.d/init.d/目录下 /etc/rc.d/init.d/目录下 .系统服务都是独立运行的守护进程包括: syslogd和cron等.运行独立的守护进程工作 syslogd和cron等.运行独立的守护进程工作 方式称作:stand 方式称作:stand -alone.它Unix传统的C/S模式的访问模式. alone.它Unix传统的C/S模式的访问模式.
守护进程工作原理和方式
在Client/Server模式下.服务器监听(Listen) Client/Server模式下.服务器监听(Listen) 在一个特定的端口上等待客户连接.连接 成功后服务器和客户端通过端口进行数据 通信.守护进程的工作就是打开一个端口, 并且等待(Listen)进入连接. 并且等待(Listen)进入连接. 如果客户端产生一个连接请求,守护进程 就创建(Fork)一个子服务器响应这个连接, 就创建(Fork)一个子服务器响应这个连接, 而主服务器继续监听其他的服务请求.
和stand-alone模式相比xinted模式也称 stand-alone模式相比xinted模式也称 Internet Super-Server(超级服务器). Super-Server(超级服务器). xinetd能够同时监听多个指定的端口,在接 xinetd能够同时监听多个指定的端口,在接 受用户请求时,他能够根据用户请求的端 口不同,启动不同的网络服务进程来处理 这些用户请求. 可以把xinetd看做一个管理启动服务的管理 可以把xinetd看做一个管理启动服务的管理 服务器,它决定把一个客户请求交给那个 程序处理,然后启动相应的守护进程.
pstree命令可以看到两种不同方式启动的网 pstree命令可以看到两种不同方式启动的网 络服务.一般来说系统一些负载高的服务: sendmail,Apache服务是单独启动的.而其 sendmail,Apache服务是单独启动的.而其 他服务类型都可以使用xinetd超级服务器管 他服务类型都可以使用xinetd超级服务器管 理.查看目前运行的守护进程可以使用命 令:"pstree" 令:"pstree"
ቤተ መጻሕፍቲ ባይዱ
服务器监听(Listen)在一个特点的端口上 服务器监听(Listen)在一个特点的端口上 等待客户端的联 机.如果客户端产生一个连接请求,守护 进程就创建(Fork)一个子服务器响应这个 进程就创建(Fork)一个子服务器响应这个 连接,而主服务器继 续监听.以保持多个子服务器池等待下一 个客户端请求.