当前位置: 首页 > 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                  # 退出

http://www.xdnf.cn/news/7831.html

相关文章:

  • 工作总结(十二)——迁移svn单项目到gitlab上,保留历史提交记录
  • 02.Spring_IOC详解
  • Evidential Deep Learning和证据理论教材的区别(主要是概念)
  • test ssl java
  • 【C++指南】哈希驱动的封装:如何让unordered_map/set飞得更快更稳?【上】
  • 数据结构学习笔记 :二叉搜索树与高效查找算法详解
  • React 列表渲染基础示例
  • DFS/BFS专练-搞定图论基础!(从海岛问题过渡至图论基础应用C++/C)
  • 无刷电机槽数相同、转子极数不同的核心区别
  • Nacos安装及数据持久化
  • ESP32之本地HTTP服务器OTA固件升级流程,基于VSCode环境下的ESP-IDF开发(附源码)
  • 【Spring Boot】MyBatis入门:连接Mysql数据库、测试单元、连接的常见错误
  • 汇编语言中的数据
  • 基于C++(MFC)的细胞识别程序
  • 人工智能在后端开发中的革命:从架构到运维
  • 前端:uniapp中uni.pageScrollTo方法与元素的overflow-y:auto之间的关联
  • 极狐GitLab 项目导入导出设置介绍?
  • 架构师面试(三十一):IM 消息收发逻辑
  • 手撕STL——vector
  • 利用DeepSeek设计一个HTML批量转换工具设计
  • Hadoop的三大结构及其作用?
  • hadoop的三大结构及各自的作用
  • yarn的定义
  • 「数据可视化 D3系列」入门第九章:交互式操作详解
  • 自动驾驶与机器人算法学习
  • 【区块链通用服务平台及组件】京北方分布式身份管理平台 | FISCO BCOS 应用案例
  • java八股之并发编程
  • 医院数据中心智能化数据上报与调数机制设计
  • 仿腾讯会议项目开发——界面关闭功能实现
  • Flink介绍——实时计算核心论文之Kafka论文详解