目录
2.6 创建守护进程案例(获取当前时间并写入到日志文件中):
一、Linux的热插拔UDEV机制
Linux 的热插拔机制主要通过 Udev(用户空间设备)来实现。Udev 是 Linux 系统中用于动态管理设备的设备管理器。以下是 Udev 实现热插拔的主要机制:
-
设备事件监测: Udev 不断监听内核发出的事件,以便检测设备的插入和拔出。内核通过 Netlink 通信机制向 Udev 发送设备事件。
-
规则匹配: 当 Udev 检测到设备事件时,它会根据预定义的规则(规则文件)来匹配事件中的设备信息。规则可以基于设备的各种属性、类型、路径等进行匹配。
-
规则文件: Udev 的规则文件通常存储在 /etc/udev/rules.d/ 目录下。这些规则文件定义了在特定条件下要执行的操作。规则文件的命名约定通常是 XX-name.rules,其中 XX 是两位数字,用于确定规则文件的加载顺序。
-
执行动作: 当规则匹配成功时,Udev 将执行相关的动作。动作可以包括创建设备节点、设置环境变量、执行脚本等。例如,可以在设备插入时创建相应的设备节点、加载适当的驱动程序等。
-
设备节点管理: Udev 负责在 /dev 目录下创建或删除设备节点。这确保了用户和应用程序可以在一个标准位置找到设备节点,而无需关心设备插入的确切时刻。
-
持久化设备节点: Udev 确保设备节点的持久性,即使设备在重新启动后未连接,也会分配相同的设备节点名称。这有助于确保应用程序可以依赖特定的设备节点。
总体而言,Udev 通过规则匹配和执行动作的方式,实现了对设备事件的监听和处理,从而支持 Linux 系统的热插拔机制。这使得在系统运行时插入或拔出设备时,系统能够动态地适应这些变化。
-
udev是一个设备管理工具,udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理 /dev目录下的设备文件。通过侦听内核发出来的硬件数据(事件),在用户空间为这个硬件去创建对应代表该硬件的文件,应用程序例如adb就可以通过该文件操作到硬件设备。
-
udev在用户空间运行,而不在内核空间运行。它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等设备文件通常放在 /dev目录下。使用 udev后,在 /dev目录下就只包含系统中真正存在的设备。
二、守护进程
守护进程(Daemon Process)是在计算机系统后台运行的一类进程,它们通常在系统启动时启动,不依赖于用户直接操作,一直运行在后台,不受用户登录或注销的影响。守护进程的存在主要是为了执行特定的系统任务或服务,例如服务器、网络服务、定时任务等。
2.1 守护进程概念和基本特点:
-
Linux Daemon(守护进程)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、 web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等。守护进程的名称通常以d结尾
-
UDEV守护进程,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。
基本特点:
-
生存周期长[非必须],一般操作系统启动的时候就启动,关闭的时候关闭。
-
守护进程和终端无关联,也就是他们没有控制终端,所以当控制终端退出,也不会导致守护进程退出
-
守护进程是在后台运行,不会占着终端,终端可以执行其他命令
-
一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程
2.2 显示进程信息:
linux操作系统本身是有很多的守护进程在默默执行,维持着系统的日常活动。大概30-50个
-
ps -efj
是一个用于显示进程信息的命令。具体解释如下:
ps -efj //显示进程信息
ps 进程状态命令
-e 显示所有进程,而不仅仅是与终端相关的进程
-f 以全格式显示
-j 以作业格式显示
在这个命令中,-ef
是常用组合,用于显示所有进程的详细信息。而 -j
则以作业格式显示,包括作业控制的信息。
输出的各列含义如下:
-
UID (User ID): 进程的用户标识。
-
PID (Process ID): 进程的唯一标识号。
-
PPID (Parent Process ID): 父进程的标识号。
-
PGID (Process Group ID): 进程组的标识号。
-
SID (Session ID): 会话的标识号。
-
TTY (Controlling Terminal): 控制终端。
-
TPGID (Foreground Group ID of the controlling terminal): 控制终端的前台进程组的标识号。
-
STAT (Process Status): 进程的状态,如 R(运行)、S(睡眠)、Z(僵尸)等。
-
TIME (Cumulative CPU time): 进程执行的累计 CPU 时间。
-
COMMAND (Command with all its arguments): 进程的命令及其参数。
这个命令的输出显示了当前系统上所有进程的详细信息,以及它们的层次结构和作业控制信息。
2.3 守护进程和后台进程的区别:
守护进程和终端不挂钩;后台进程能往终端上输出东西(和终端挂钩);
守护进程关闭终端时不受影响,守护进程不会随着终端的退出而退出;
守护进程(Daemon Process)和后台进程(Background Process)是两个不同的概念,它们有以下区别:
-
启动方式:
守护进程: 通常由系统启动,独立于控制终端,以在后台运行的方式启动。 后台进程: 可以由用户手动将一个前台进程移至后台,即使它最初是由用户启动的。
-
是否与终端关联:
守护进程: 通常不与任何控制终端关联,因此它们不受终端关闭的影响。 后台进程: 可以从终端启动,并且可能受终端的影响。
-
执行环境:
守护进程: 在后台执行,并且通常在系统引导时启动。它们通常在系统运行期间一直存在。 后台进程: 通常是用户在前台启动的进程,后来放到后台执行,可能在终端关闭后继续运行。
-
继承环境:
守护进程: 通常会脱离终端会话,重新设置文件权限,改变工作目录等,以确保独立于用户终端的环境。 后台进程: 通常继承自其父进程(通常是终端 Shell)的环境。
-
用户交互性:
守护进程: 通常不与用户进行交互,因为它们不关联于任何终端。 后台进程: 在启动时可能与用户进行交互,但放到后台后通常不再与用户直接交互。
总的来说,守护进程是一种设计用于在系统后台一直运行的进程,而后台进程是一种在终端启动后被放到后台执行的进程。
2.4 创建守护进程的步骤和守护进程的特征:
2.4.1 创建守护进程的步骤:
-
调用
fork
函数: 创建一个子进程,父进程退出,子进程继续执行。 -
调用
sets