欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 守护进程编程

守护进程编程

2025/12/4 21:56:39 来源:https://blog.csdn.net/changtianFirst/article/details/147326393  浏览:    关键词:守护进程编程

守护进程(Daemon Process) 是一种在后台运行的进程,通常没有终端控制。它们通常在系统启动时启动,并在系统关闭时停止。

守护进程的特征:
1.它没有控制终端(即不与用户的终端交互)。
2.它通常运行在后台,独立于用户会话。
3.它在系统启动时启动,并且在系统关闭时停止。
4.它通常会重定向输入/输出,避免与终端相关的交互。

编程实现守护进程的主要步骤:

1.创建子进程
使用 fork() 创建一个子进程。父进程退出,确保守护进程独立运行。

2.创建新的会话
调用 setsid() 来使子进程成为会话的领导者,并且脱离控制终端。

3.改变工作目录
通常守护进程会将当前工作目录更改为根目录,以避免占用挂载点。

4.文件权限
由于守护进程不与终端相关联,它通常会关闭标准输入、输出、错误流并重定向到一个文件,避免和终端交互。

5.处理信号
守护进程通常会忽略某些信号,或者为某些信号设置处理程序。

6.运行主任务
完成以上步骤后,守护进程会进入主循环,执行其主要任务。

在阿里云服务器、树莓派上实践

1.nohup

#阿里云服务器
nohup ping 8.8.8.8 > /dev/null 2>&1 &#树莓派
nohup python3 my_script.py > /dev/null 2>&1 &

在这里插入图片描述

2.fork
编写一个c文件,编译运行(两者操作相同)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>int main() {pid_t pid = fork();if (pid < 0) {exit(EXIT_FAILURE);}if (pid > 0) {exit(EXIT_SUCCESS);}umask(0);setsid();// 关闭标准文件描述符close(STDIN_FILENO);close(STDOUT_FILENO);close(STDERR_FILENO);// 守护进程主循环while (1) {// 你的守护进程代码sleep(10);}return EXIT_SUCCESS;
}
gcc daemon_fork.c -o daemon_fork
./daemon_fork

在这里插入图片描述

3.daemon
和上面的操作一样

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>int main() {// daemon(nochdir, noclose)if (daemon(1, 1) < 0) {perror("daemon");exit(EXIT_FAILURE);}// 守护进程主循环while (1) {// 你的守护进程代码sleep(10);}return EXIT_SUCCESS;
}
gcc daemon_func.c -o daemon_func
./daemon_func

在这里插入图片描述

GDB调试

创建一个c文件

#include <stdio.h>int sum(int a, int b) {return a + b;
}int main() {int x = 5;int y = 10;int result = sum(x, y);printf("Result: %d\n", result);return 0;
}

编译运行

gcc -g testgdb.c -o testgdb

启动GDB

gdb ./testgdb

在这里插入图片描述

树莓派实现外网访问

借助阿里云服务器,使用SSH反向代理,完成树莓派的外网访问。
首先,配置阿里云服务器的ssh文件
image-20250417132857887
进入树莓派终端输入

ssh -p 22 -qngfNTR port:localhost:22 user_pi@aliyun_ip

完成后再阿里云服务器输入ss -ntl查看是否有对应的连接,在另外一台电脑终端输入

ssh -p [你绑定的端口号] [树莓派用户]@云服务器地址

在这里插入图片描述

总结

每天都学习一点。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词