守护进程编程

一、守护进程

守护进程的含义:

守护进程是计算机中的一种特殊后台服务进程,通常在系统启动时自动运行,独立于用户终端,长期驻留在系统中执行特定任务。守护进程是操作系统服务可靠性的关键,确保核心功能持续可用而不受用户操作干扰。

在后台运行,不依赖用户交互,无控制终端,默默执行任务。其生命周期长,从系统启动到关闭持续运行,除非手动终止或遇到错误。且为其他程序或用户提供基础服务。

编程实现守护进程的主要过程:

1.fork创建子进程,并退出父进程

2.调用 setsid() 函数创建新会话

3.再次 fork

4.调用 chdir() 函数,更改工作目录

5.重设文件权限掩码

6.关闭所有打开的文件描述符,重定向标准输入/输出/错误

7.退出处理

二、创建守护进程

1.nohup命令

编写脚本:

#!/bin/bash

while true; do

echo "Running daemon task..." >> /tmp/daemon.log

sleep 10

done

赋予脚本执行权限:

chmod +c loop.sh

启动守护进程:

nohup ./loop.sh > /dev/null 2>&1 &

2.fork()函数

编写一个C程序:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/stat.h>

void daemonize() {

pid_t pid = fork();

if (pid < 0) {

perror("fork failed");

exit(EXIT_FAILURE);

}

if (pid > 0) {

// 父进程退出

exit(EXIT_SUCCESS);

}

复制代码
// 子进程继续运行
setsid(); // 创建新会话
chdir("/"); // 改变工作目录
umask(0); // 重设文件权限掩码

// 关闭标准输入输出流
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

// 执行守护任务
while (1) {
    FILE *fp = fopen("/tmp/daemon_fork.log", "a");
    fprintf(fp, "Daemon running...\n");
    fclose(fp);
    sleep(10);
}

}

int main() {

daemonize();

return 0;

}

编译:

gcc -o fork_test fork_test.c

运行守护进程:

./fork_test

3.daemon()函数

编写一个C程序:

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

int main() {

// 调用 daemon() 函数

if (daemon(1, 0) == -1) {

perror("daemon failed");

exit(EXIT_FAILURE);

}

复制代码
// 执行守护任务
while (1) {
    FILE *fp = fopen("/tmp/daemon_builtin.log", "a");
    fprintf(fp, "Daemon running...\n");
    fclose(fp);
    sleep(10);
}

return 0;

}

编译:

gcc -o daemon_test daemon_test.c

运行守护进程:

./daemon_test

三、gdb命令

编写一个C程序:(简单加法)

#include <stdio.h>

int add(int a, int b) {

return a + b;

}

int main() {

int x = 1;

int y = 2;

printf("Sum is %d\n", add(x, y));

return 0;

}

编译:

gcc -g -o test gdb_test.c

启动:

gdb ./test

设置断点:break add

运行: run

退出:

quit

四、SSH反向代理

检查ssh:(树莓派、阿里云)

sudo systemctl status ssh

检查端口:(阿里云)

sudo netstat -tuln | grep 9624

建立 SSH反向代理:(树莓派)

ssh -R 9624:localhost:22 yaox@114.55.126.125

从外网访问树莓派:

ssh -p 9624 yaox@114.55.126.125

相关推荐
寻星探路19 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
wdfk_prog21 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
七夜zippoe1 天前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
盟接之桥1 天前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿1 天前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘1 天前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
会员源码网1 天前
理财源码开发:单语言深耕还是多语言融合?看完这篇不踩坑
网络·个人开发
米羊1211 天前
已有安全措施确认(上)
大数据·网络
Fcy6481 天前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满1 天前
Linux怎么查看最新下载的文件
linux·运维·服务器