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

Linux网络编程套接字(五)之简单的TCP网络程序3【TCP守护进程化】

文章目录

    • 简单的TCP网络程序
      • Tcp守护进程化
        • 控制前台后台进程的命令
        • Linux进程间的关系
        • 实现守护进程

简单的TCP网络程序

Tcp守护进程化

process.cc

#include<iostream>
#include<string>
#include<unistd.h>using namespace std;int main()
{while(1){cout<<"hello world"<<endl;sleep(1);}return 0;
}

img

这个进程默认在前台运行。所以可以用ctrl+c终止进程。

img

加个& ,该进程就变后台进程了,也可以执行输入的命令了,但是不可以用CTRL+C终止进程。

控制前台后台进程的命令

img

./process 前台进程

img

./process & 后台进程

img

fg 任务号 把后台进程放到前台

img

img

jobs 查看后台任务

img

把前台进程变成后台

CTRL+Z 暂停进程

这时候暂停的进程就变成后台进程了(bash自动变成前台进程)

bg 任务号 启动后台任务

img

Linux进程间的关系

img

img

bash退出,云服务器的Linux后台进程不会退出,

但是PPID将会变成1,也就是被操作系统领养了,PID\PGID\SID不变

TTY变成 ? ,也就是与终端无关。TPGID也变成了-1.

父进程变成操作系统说明:后台进程是会受到用户登陆注册的影响的。

如果不想受到任何用户登陆和注销的影响 – 守护进程化

注销:把会话删掉!把所有新起的任务删除!

实现守护进程

img

setsid

img

创建一个会话,将组ID设置为会话ID,创建会话的进程不可以是进程组的组长!

//关键代码
if(fork()>0)exit(0);
setsid();

所以守护进程的本质也是孤儿进程!

img

写入 /dev/null 的数据会被丢弃

Daemon.hpp

#pragma once#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <cstdlib>
#include <string>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>using namespace std;
const string nullfile = "/dev/null";void Daemon(const string &s = "")
{// 1.忽略其他异常信号signal(SIGPIPE, SIG_IGN);signal(SIGSTOP, SIG_IGN);signal(SIGCHLD, SIG_IGN);// 2.将自己变成独立的会话if (fork() > 0)exit(0);setsid();// 3.更改当前的调用进程的工作目录if (!s.empty())chdir(s.c_str());// 4.关闭/重定向 标准输入,标准输出,标准错误(/dev/null)int fd = open(nullfile.c_str(), O_RDWR); // 读写方式if (fd > 0){dup2(fd, 0);dup2(fd, 1);dup2(fd, 2);close(fd);}
}

img

关闭守护进程

img

daemon

img

http://www.xdnf.cn/news/19832.html

相关文章:

  • Corona渲染噪点终结指南:3ds Max高效去噪全攻略
  • matplotlib中文宋体,西文新罗马
  • 自学嵌入式第三十二天:网络编程-UDP
  • 最常见的设备管理系统有哪些?设备采购、盘点、库存管理软件TOP10
  • 只需几条命令,本地体验微软最新长文本语音合成 VibeVoice(支持中文)
  • 专有云企业级特征
  • Turso数据库:用Rust重构的下一代SQLite——轻量级嵌入式数据库的未来选择
  • 碳酸钆:稀土家族里看不见的科技推手
  • 【Maven】《十分钟搞清Maevn项目》
  • 第四章 windows实战-emlog
  • 什么是流程图:流程六要素、三大结构及绘制规范总结
  • 【光照】Unity中的[经验模型]
  • 零工考勤不准、发薪扯皮?盖雅方案让每份工时都清晰可信
  • Web3兴起:重新定义互联网格局
  • 51c大模型~合集177
  • 对象存储 - 同步数据
  • 分布式爬虫的全局请求间隔协调与IP轮换策略
  • 开发(1)获取用户登录IP
  • 信息安全各类加密算法解析
  • 【C++】14. 多态
  • uniapp H5预览图片组件
  • 在VS Code中直接操控浏览器
  • CodeForge v25.0.3 发布:Web 技术栈全覆盖,编辑器个性化定制新时代
  • USB4与PCIe的技术融合:新一代接口协议的架构革新
  • 【论文阅读】Neuro-Symbolic Integration Brings Causal and Reliable Reasoning Proofs
  • 【报错记录】OpenGauss/磐维数据库连接报:org.postgresql.util.PSQLException: 致命错误: 账户被锁定
  • 分公司、工厂、出差人员远程访问办公系统,如何安全稳定又省钱?
  • HTML第六课:表格展示
  • 腾讯开源WMT2025冠军大模型:拿下30个第一,同类最佳
  • 2025 年普通人还可以期待 NFT 交易市场吗?