惊雷无声 发表于 6 天前

保卫历程编程

一、保卫历程

保卫历程的含义:
保卫历程是盘算机中的一种特殊后台服务历程,通常在系统启动时主动运行,独立于用户终端,恒久驻留在系统中执行特定任务。保卫历程是操作系统服务可靠性的关键,确保核心功能持续可用而不受用户操作干扰。
在后台运行,不依靠用户交互,无控制终端,默默执行任务。其生命周期长,从系统启动到关闭持续运行,除非手动停止或遇到错误。且为其他程序或用户提供底子服务。
编程实现保卫历程的主要过程:
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 &
https://i-blog.csdnimg.cn/direct/6bba9c939c3848208ad08311c21fe0a6.png
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;
}
https://i-blog.csdnimg.cn/direct/b64998f5e5f04f79b23d79f516a10dc8.png
编译:
gcc -o fork_test fork_test.c
运行保卫历程:
./fork_test
https://i-blog.csdnimg.cn/direct/fbde7970d979436383623dead56ad327.png
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
https://i-blog.csdnimg.cn/direct/58ceed0def614ceda7d3d76a76ff7e43.png
三、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
https://i-blog.csdnimg.cn/direct/3fb0a434f0e54296b6664ff02dec3b5c.png
设置断点:break add
运行: run
https://i-blog.csdnimg.cn/direct/dc3dfe1edbde4a04a12bb9058691e3a9.png
退出:
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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 保卫历程编程