一、守护进程
守护进程(Daemon Process)是一种在后台运行的特殊进程,它独立于控制终端,并且在系统启动时自动运行,通常用于执行一些系统级的任务或提供特定的服务。以下是关于守护进程的详细定义和特点:
1、定义
守护进程是一种长期运行的进程,它在后台默默地执行特定的任务,不与用户直接交互。它的生命周期通常从系统启动开始,一直持续到系统关闭。
2、特点
后台运行:守护进程在后台运行,不依赖于任何终端或用户会话。即使用户注销或关闭终端,守护进程仍然会继续运行。
独立性:它独立于控制终端,不会受到终端关闭、用户登录或注销等操作的影响。
系统服务:守护进程通常用于提供系统级的服务,如网络服务(如 Web 服务器、邮件服务器)、文件服务(如 NFS 服务器)、打印服务等。
自动启动:在系统启动时,守护进程会自动启动,并在后台等待处理各种请求或执行特定的任务。
资源管理:守护进程通常会对系统资源进行有效的管理和利用,以确保系统的稳定性和性能。
3、作用
提供系统服务:像 Web 服务器守护进程能提供网页浏览服务,让用户通过浏览器访问网站;邮件服务器守护进程负责邮件的接收、发送和存储,保障邮件系统的正常运行。
执行定时任务:例如系统中的定时备份守护进程,可按设定的时间间隔对重要数据进行备份;还有系统更新守护进程,能定期检查软件更新并自动下载安装,确保系统保持最新状态。
监控系统状态:如监控系统资源使用情况的守护进程,实时监测 CPU、内存、磁盘等资源的使用状况,当资源使用出现异常时及时发出警报;文件系统监控守护进程能监测文件的变化,如文件的创建、修改、删除等操作,保障文件系统的安全和稳定。
4、应用场景
服务器环境:广泛应用于各种服务器,如 Web 服务器、数据库服务器、文件服务器等,为客户端提供稳定的服务。以数据库服务器为例,守护进程持续运行,等待客户端的连接请求,处理数据库的查询、更新等操作。
嵌入式系统:在智能设备、工业控制等嵌入式系统中,守护进程用于监控设备状态、处理传感器数据以及控制设备的运行。比如智能家居系统中,守护进程可以实时监测温度、湿度等传感器数据,并根据设定的规则控制家电设备的运行。
云计算平台:在云计算环境中,守护进程用于管理虚拟机、监控资源使用情况以及实现负载均衡等功能。例如,云计算平台中的资源监控守护进程,实时收集各个服务器节点的资源使用信息,为资源分配和调度提供依据。
二、在Linux系统中创建守护进程
1、过程
创建子进程,取消父进程:使子进程成为孤儿进程,被 init 进程收养。
创建新会话:子进程调用setsid
函数创建新会话,脱离原控制终端。
改变工作目录:防止原工作目录无法卸载。
设置文件权限掩码:避免继承不必要的文件权限。
关闭文件描述符:关闭从父进程继承的不必要的文件描述符。
2、创建守护进程
使用nohup创建守护进程
先创建一个c语言文件(long_task.c)
#include <stdio.h>
#include <unistd.h>int main() {int i = 0;while (1) {printf("C Program Running - Iteration %d\n", i++);fflush(stdout); // 强制刷新输出缓冲区,确保日志实时写入文件sleep(5);}return 0;
}
在树莓派中将其编译成一个可执行文件
gcc long_task.c -o long_task
chmod +x long_task
运行及验证
./long_task
ps aux | grep long_task
3、GDB调试
先创建一个out_test.c文件
#include <stdio.h>int main() {printf("Hello Raspberry Pi!\n");return 0;
}
依次在树莓派上输入下面指令
out_test.c -o out_test
sudo gdb ./out_test
这时会提示你输入账户密码
终端出现(gdb)提示,在这后面输入指令
(gdb) break main # 在 main 函数设置断点
(gdb) run # 启动程序
(gdb) next # 逐行执行
(gdb) quit # 退出