linux daemon(守护进程)

守护进程(Daemon)在Linux系统中扮演着重要角色,如HTTP服务进程、SSH服务进程等。它们无控制终端,长时间运行在后台。守护进程分为stand alone和super daemon两类,前者常驻内存,后者按需启动。启动脚本通常位于/etc/init.d/,配置文件分布在多个目录。守护进程设计涉及特殊步骤,包括fork、setsid等,以确保其在终端关闭后仍能后台运行。利用系统库函数daemon()可方便创建守护进程。
摘要由CSDN通过智能技术生成

什么是Daemon

Daemon程序,又称为守护进程,通常在系统后台长时间运行,由于没有控制终端而无法与前台交互。Daemon程序一般作为系统服务使用。Unix/Linux中的daemon进程类似于Windows中的后台服务进程,例如http服务进程nginx,ssh服务进程sshd等。

ps -axj 命令打印系统中各进程的状态。
选择项- a显示由其他用户所拥有的进程的状态。
-x显示没有控制终端的进程的状态。
-j显示与作业有关的信息:对话期 ID、进程组ID、控制终端以及终端进程组 ID。

ps输出结果.

进程0,1,2,这些进程非常特殊,存在于系统的整个生命期中。 它们没有父进程ID,没有组进程ID,也没有对话期ID。

进程ID0是调度进程,常常被称为交换进程(swapper)。该进程并不执行任何磁盘上的程序—它是内核的一部分,因此也被称为系统进程。

进程ID1通常是init进程,在自举过程结束时由内核调用。该进程的程序文件在UNIX的早期版本中是/etc/init,在较新版本中是/sbin/init。此进程负责在内核自举后起动一个UNIX系统.init通常读与系统有关的初始化文件(/etc/rc*文件),并将系统引导到一个状态(例如多用户)。init进程决不会终止。它是一个普通的用户进程(与交换进程不同,它不是内核中的系统进程 ),但是它以超级用户特权运行。

在某些UNIX的虚存实现中,进程ID 2是页守护进程( pagedaemon)。此进程负责支持虚存系统的请页操作。与交换进程一样,页守护进程也是内核进程。

syslogd守护进程可用于任何为操作人员记录系统消息的程序中。可以在一台实际的控制台上打印这些消息,也可将它们写到一个文件中。
sendmail是标准邮递守护进程。
update程序定期将内核缓存中的内容写到硬盘上(通常是每隔30秒)。为了做到这一点,该程序每隔 3 0秒调用sync(2)函数一次。
cron守护进程在指定的日期和时间执行指定的命令。许多系统管理任务是由 cron定期地使相关程序执行而得以实现的。
inetd守护进程,它监听系统的网络界面,以输入对各种网络服务器的请求。
lpd处理对系统提出的各个打印请求。

注意,所有守护进程都以超级用户(用户ID为0)的优先权运行。没有一个守护进程具有控制终端——终端名称设置为问号(?)、终端前台进程组ID设置为-1。缺少控制终端可能是守护进程调用了setsid的结果。除update以外的所有守护进程都是进程组的首进程,对话期的首进程,而且是这些进程组和对话期中的唯一进程。update是它所在进程组(37)和对话期(37)中的唯一进程,但是该进程组的首进程(可能也是该对话期的首进程)已经终止。最后,应当引起注意的是所有这些精灵进程的父进程都是init进程。

Daemon的分类

分类方式一:按照“是否可以独立启动”分类

stand alone类型的daemon
这种类型的daemon可以自行启动,启动之后可以常驻内存,直到手动关闭该daemon才释放资源。
最大的优点是响应速度快,多用于能够随时接受远程请求的服务,如WWW的daemon(httpd)、FTP的daemon(vsftpd)等。

由super daemon管理的daemon
这种类型的daemon由super daemon统一管理,当请求到来时,由super daemon启动请求的服务,请求完成后便释放内存资源。
早期的super daemon是inetd,后来被xinetd替代了。
注意:super daemon本身是一个stand alone的服务,因为它需要管理后续的其他服务,所以它自己本身当然需要常驻内存中。

两者的区别:
stand alone类型的daemon可以自行启动,无需依赖其他daemon;而super daemon管理的daemon必须借助super daemon来启动;
stand alone类型的daemon启动后便常驻内存,而被super daemon管理的daemon只有等到用户请求时才被加载进内存,并且在请求完成后便释放内存资源。由于后者每次请求到来的时候才被加载进内存,因此响应速度比stand alone型daemon要慢。但是它执行完就释放内存资源,因此更节约内存资源。

分类方式二:按照“请求到来时是否能够立即运行”分类

signal-control类型的daemon
这种类型的daemon当有请求到来时便能立即执行。

interval-control类型的daemon
这种类型的daemon会周期性地执行某项工作,因此它没有请求一说,它会周期性地读取配置文件,并执行配置文件中要求的功能。如crond、atd都属于interval-control类型的daemon。

Daemon的启动

服务启动脚本存放位置

Linux系统中有一个公认的目录用来存放服务启动脚本: ”/etc/init.d/“。即使有些Linux系统的服务启动脚本没有放在/etc/init.d/目录下,它也会设置连接文件到/etc/init.d/下的。

与daemon相关的目录介绍
/etc/init.d/
该目录存放所有stand alone型daemon的初始化脚本。
/etc/sysconfig/
该目录存放所有daemon的初始化配置文件。
/etc/xinetd.conf
该文件是super daemon的配置文件。
该文件将会加载/etc/xinetd.d/目录下的所有配置文件。
/etc/xinetd.d/
该目录存放所有被super daemon管理的daemon的配置文件。
daemon启动或关闭就在这些配置文件中配置。
/etc/
该目录存放各daemon各自的配置文件。
/var/lib/
该目录存放各daemon的数据库文件。
/var/run/
该目录记录各daemon的PID。

服务启动方式

stand alone型Daemon的启动方式

通过/etc/init.d/xxx启动
启动一个服务是一个繁琐的过程,你需要进行一系列启动前的操作,为了避免这些麻烦,服务提供商把这些繁琐的过程封装在一个shell srcipt中,我们只需执行一个shell script即可启动一个daemon。几乎所有的stand alone型daemon的启动脚本都放在/etc/init.d/下,所以我们只需执行/etc/init.d/xxx start即可启动xxx服务。

通过service命令启动
若每次启动一个命令都要写/etc/init.d/略微有些麻烦,service命令将其进行了封装,我们只要执行service xxx start/status/restart/stop即可开启/查看/重启/关闭xxx服务。

super daemon型Daemon的启动方式

step1:设置daemon的配置文件
每一个被super daemon管理的daemon都有一个配置文件,在/etc/xinetd.d/目录下。每个daemon的开启或关闭均在该daemon对应的配置文件中设置。

step2:启动super daemon
super daemon是一个stand alone型daemon,因此在daemon的配置文件设置好后可通过service xinetd start启动所有由super daemon管理的daemon。

简单小结:服务启动方式
(1)通用的启动方式:/etc/init.d/* {start|stop|status|restart}。
(2)部分系统特有的:service [service name] {start|stop|status|restart}
和 rc[service name] {start|stop|status|restart}。
例如重启crontab服务,分别用以上三种方式:
/etc/init.d/crond restart
service crond restart
rccrond restart

设置Daemon开启启动

Linux启动时可以选择有不同的开机等级,不同等级将会开启

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值