当前位置: 首页 > news >正文

守护进程及gdb调试(新手简略版)

一、守护进程

守护进程(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                  # 退出

相关文章:

  • 数控铣床自动上下料机械手控制装置设计
  • python豆包语音合成并播放
  • keil5软件配置以及使用技巧
  • Aladdin显卡多任务运行教程
  • 大模型应用_AutoGPT
  • 软件测试之接口测试详解
  • Linux CentOS 更改MySQL数据库目录位置
  • 生态篇|多总线融合与网关设计
  • 函数与数组---------C语言经典题目(1)
  • Vue 3 计算属性与侦听器深度解析:优雅处理响应式数据
  • ​​Nginx快速入门-3:工作流程和模块化
  • day1-小白学习JAVA(mac版)---(jdk安装和环境变量配置)
  • 【Reading Notes】(8.2)Favorite Articles from 2025 February
  • ModbusTCP 转 Profinet 主站网关
  • 从零实现Git安装、使用
  • FairMOT与MCFairMOT算法对比
  • 【web服务_负载均衡Nginx】二、Nginx 核心技术之负载均衡与反向代理
  • c++ static 和 extern 关键字
  • 论文阅读笔记——Mixtral of Experts
  • 期货交易躲过AI捕杀—期货反向跟单策略
  • 中印尼“2+2”:中国周边外交的范式突破与东南亚棋局重构
  • 安且吉兮,西泠印社雅集吴昌硕故里
  • 湖南平江发生一起意外翻船事件,6人不幸溺亡
  • 王东杰:重审康有为的“大同世界”
  • 观察|智驾监管升级挤掉宣传水分,行业或加速驶入安全快车道
  • 老总们带着产品直奔对接会,外贸拓内销找到更多“新路子”