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

守护者进程小练习

守护者进程含义

定义:守护进程(Daemon)是运行在后台的特殊进程,独立于控制终端,周期性执行任务或等待事件触发。它通常以 root 权限运行,名称常以 d 结尾(如 sshd, crond)。
特性:
后台运行:脱离终端,关闭终端不影响其运行。
无交互性:不依赖用户输入,输出通常通过日志记录。
长期存活:系统启动时开始运行,随系统关闭停止。
父进程为 init:原父进程退出后,由 init 进程接管。

在Ubuntu上创建一个守护者进程

nohup命令方式

#!/bin/bash
while true; doecho "守护进程运行中..." >> /tmp/nohup.logsleep 5
done

请添加图片描述

fork函数

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <syslog.h>
#include <sys/stat.h>int main() {pid_t pid;// 第一次 fork,父进程退出pid = fork();if (pid < 0) exit(1);if (pid > 0) exit(0); // 父进程退出// 创建新会话if (setsid() == -1) {exit(1); // 处理 setsid 失败}// 第二次 fork,避免成为会话组长pid = fork();if (pid < 0) exit(1);if (pid > 0) exit(0);// 初始化 syslog(关键步骤!)openlog("fork_test", LOG_PID | LOG_PERROR, LOG_DAEMON);// 改变目录if (chdir("/") == -1) {syslog(LOG_ERR, "chdir failed");exit(1);}umask(0);// 关闭文件描述符for (int i = 0; i < 3; i++) close(i);// 主逻辑while (1) {syslog(LOG_INFO, "守护进程运行中..."); // 使用 LOG_INFOsleep(5);}return 0;
}

请添加图片描述

daemon函数

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <syslog.h>
#include <errno.h>int main() {// 使用 daemon(0, 0) 自动完成守护进程创建if (daemon(0, 0) == -1) {perror("daemon");exit(1);}while (1) {syslog(LOG_INFO, "守护进程运行中...");sleep(5);}return 0;
}

请添加图片描述

GDB调试

GDB调试原理:
核心机制:通过 ptrace 系统调用控制目标进程,实现暂停、单步执行、查看内存等。
关键功能:
断点设置:在代码中插入 int 3 指令,触发中断暂停。
内存访问:读写目标进程的内存,查看变量值。
反向调试:记录执行历史,支持回溯。

测试程序

#include <stdio.h>
#include <unistd.h>int main() {int a = 10;int b = 20;int c = a + b;printf("a + b = %d\n", c);sleep(5);return 0;
}

调试命令实例

(gdb) break main          # 在 main 函数设置断点
(gdb) run                 # 运行程序
(gdb) print a             # 查看变量 a 的值
(gdb) step                # 单步执行
(gdb) bt                  # 查看调用栈
(gdb) quit                # 退出 GDB

请添加图片描述

用笔记本电脑,通过访问阿里云服务器的端口(穿透)登录到树莓派系统

在这里插入图片描述

相关文章:

  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 + 解析
  • 线上健身预约小程序源码介绍
  • C++ 20 信号量详解
  • 梯度下降,共轭梯度,牛顿法,拟牛顿法的收敛速度对比
  • SAP 查找JOB进程ID
  • 05、GPIO外设(五):CubeMX配置
  • SQL:聚合函数(Aggregate Functions)
  • Java 接入deepseek(非流式)
  • 基于autoware.1.14与gazebo联合仿真进行激光点云循迹仿真
  • 基于领域知识的A型主动脉夹层综合分割及面向临床的评估|文献速递-深度学习医疗AI最新文献
  • 【学习笔记】文件上传漏洞--黑白盒审计
  • 文章记单词 | 第37篇(六级)
  • 云服务器和物理服务器
  • AI写程序: 多线程网络扫描网段ip工具
  • 内网穿透服务器—FRP
  • 颚式破碎机的设计
  • c# 简单实现将Message的内容保存到txt中,超过100个则清理旧文件
  • Linux:线程的同步与互斥(生产者消费者模型的demo)
  • Function Calling的时序图(含示例)
  • FA-YOLO:基于FMDS与AGMF的高效目标检测算法解析
  • 农业未来十年展望:预计粮食单产水平将提高7.8%,达到421千克/亩
  • 累计亏损10亿元,桂林旅游怎么了?
  • 伊朗外长: 下一轮伊美核问题谈判将于26日举行
  • 加快从数量增长向品质跃升转变,促进生态空间与城市功能有机共生!龚正调研公园城市建设工作
  • 上海奉贤这所九年一贯制学校将迎首批新生,有何特色?
  • 人民日报读者点题·共同关注:今天,我们需要什么样的企业家?