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

LINUX学习——守护进程的含义及编程实现

实验目的
  1. 理解守护进程的含义。
  2. 掌握编程实现守护进程的主要步骤。
实验步骤
  1. 守护进程的含义

    • 守护进程是运行在后台的一种特殊进程,独立于控制终端,周期性地执行任务或等待处理事件。
    • 守护进程通常以 d 结尾,如 httpdsshd 等。
  2. 编程实现守护进程的主要步骤

    • 创建子进程,父进程退出。
    • 调用 setsid() 创建新会话。
    • 改变工作目录为根目录 /
    • 重设文件权限掩码 umask
    • 关闭不需要的文件描述符。
    • 处理 SIGCHLD 信号,避免僵尸进程。
  3. 代码示例

  ```c#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h> // 添加这个头文件
#include <signal.h>int main() {pid_t pid;pid = fork();if (pid < 0) {perror("fork error");exit(1);}if (pid > 0) {exit(0); // 父进程退出}setsid(); // 创建新会话chdir("/"); // 改变工作目录umask(0); // 重设文件权限掩码// 关闭文件描述符for (int i = 0; i < 3; i++) {close(i);}// 忽略 SIGCHLD 信号signal(SIGCHLD, SIG_IGN);while (1) {printf("守护进程运行中...\n");sleep(5);}return 0;
}

```bash
bash
复制
gcc daemon.c -o daemon
运行程序:
bash
复制
./daemon
查看守护进程是否在运行:
bash
复制
ps -ef | grep 'daemon'
实验结果
  • 编译并运行程序后,守护进程在后台持续运行,即使终端关闭也不会终止。
  • 查看进程信息,确认其 PPID 为 1。
    在这里插入图片描述

实验二:使用三种方法创建守护进程

实验目的
  1. 使用 nohup 命令、fork() 函数和 daemon() 函数创建守护进程。
实验步骤
  1. 使用 nohup 命令
    nohup ./your_program &
    

在这里插入图片描述

  1. 使用 fork() 函数

    • 参考实验一的代码,通过 fork()setsid() 创建守护进程。
      在这里插入图片描述
  2. 使用 daemon() 函数

    #include <unistd.h>
    int main() {if (daemon(0, 0) == -1) {perror("daemon error");exit(1);}while (1) {printf("守护进程运行中...\n");sleep(5);}return 0;
    }
    

在这里插入图片描述

实验三:GDB调试原理及应用

实验目的
  1. 掌握 GDB 调试原理。
  2. 使用 GDB 调试一个 C 程序。
实验步骤
  1. GDB 调试原理

    • GDB 通过 ptrace 系统调用控制被调试程序的执行。
    • 可以设置断点、查看变量、单步执行等。
  2. 调试 C 程序

    • 编写一个简单的 C 程序:
      #include <stdio.h>
      int main() {int a = 1, b = 2, c = a + b;printf("c = %d\n", c);return 0;
      }
      
    • 编译时加入调试信息:
      gcc -g test.c -o test
      
    • 启动 GDB:
      gdb ./test
      
    • 设置断点并运行:
      break 5
      run
      

在这里插入图片描述

相关文章:

  • KaliARP 攻击工具配置——简单局域网断网攻击
  • C言雅韵集:野指针
  • 团体程序设计天梯赛PTA-SHU冲刺赛4. L22-L32
  • 【AI学习】OpenAI:《A practical guide to building agents》(中文介绍与原文)
  • 无锡透平叶片将携尖端叶片登陆2025涡轮展,5月苏州相见
  • 《软件设计师》复习笔记(11.5)——测试原则、阶段、测试用例设计、调试
  • Linux文件类型
  • Day3-UFS深入学习路线
  • MAC-如果是分页查询,怎么分批次in;基于多线程的分页查询工具类
  • Windows 图形显示驱动开发-WDDM 1.2功能—Windows 8 中的 DirectX 功能改进(六)
  • 《软件设计师》复习笔记(13)——结构化开发方法
  • X-AnyLabeling开源程序借助 Segment Anything 和其他出色模型的 AI 支持轻松进行数据标记。
  • Python 创意:AI 图像生成
  • Canal组件学习使用
  • FreeSWITCH中SIP网关(Gateway)操作
  • 方德桌面操作系统V5.0-G23安装Anaconda
  • Multi Agents Collaboration OS:文档合规性及质量检测助手设计及实践
  • Vue3 计算属性与侦听器深度解析:优雅处理响应式数据引言
  • 使用 Vue 开发登录页面的完整指南
  • 经济指标学习(二)
  • 专访|《触碰你》导演长井龙雪:“秩父铁三角”不只是朋友
  • 北京航空航天大学强基计划今年新增4个招生培养方向
  • A股和港股市场小幅走强,“地产链”相关股票爆发
  • 一季度全国铁路发送旅客10.74亿人次,创同期历史新高
  • 刚破格晋升为人大教授的“95后”叶紫薇,重回中学母校招生