linux篇【12】:计算机网络<后序>

news/2024/4/29 21:31:01/文章来源:https://blog.csdn.net/zhang_si_hang/article/details/128395483


 

一.tcp接入线程池(使用线程池)

1.tcp初步接入线程池

我们设置了对应的任务是死循环,那么线程池提供服务,就显得有不太合适。我们给线程池抛入的任务都是短任务

因为他并没有访问任何类内成员,所以可以把执行方法提到类外,执行任务时就可以不用把服务和类绑定了bind(&ServerTcp::transService, this,。②threadRoutine也没用了

代码:

提交了2022-12-23对tcp初步接上线程池的代码 · cf60e99 · beyond/linux - Gitee.com

2.popen

作用:创建管道,再fork创建子进程,子进程调用exec执行命令command,执行完后通过管道将数据交给父进程,父进程再把数据传入返回值中的文件描述符中。使用完把文件pclose关闭即可

FILE *popen(const char *command, const char *type);

command:执行一个命令command。type:r读还是w写方式打开

返回值:底层的pipe/fork调用失败返回nullptr

二.守护进程/精灵进程——部署

这两种是同一种进程的不同翻译,是特殊的孤儿进程,不但运行在后台,最主要的是脱离了与终端和登录会话的所有联系,也就是默默的运行在后台不想受到任何影响,并且退出后不会成为僵尸进程。

一般以服务器的方式工作,对外提供服务的服务器,都是以守护进程(精灵进程)的方式在服务器中工作的,一旦启动之后,除非用户主动关闭,否则,一直会在运行
守护进程特点:①父进程是系统。②守护进程命名通常以d结尾

1.介绍PGID,SID等各个名称

(1)介绍

PPID:父进程的id。PID:进程本身的id。PGID:当前进程所属的进程组。(同组进程的第一个进程一般是进程组的组长)SID:当前进程的会话id。

 COMMAND:命令。TIME:进程启动的时长。UID:用户名映射后的数字,用户UID。

TPGID:当前进程组和终端相关的信息,-1 说明进程和终端无关系,非-1说明有关。

TTY:哪一个终端

(2)进程组: 

 

2.会话,守护进程/精灵进程定义

用户登录时会建立一个会话,会话内部会构建一个前台进程组 和 0个或者多个后台进程组,linux下客户端登录时 会给我们加载bash,bash就是前台进程组。(windows下的注销就是新建立一个会话)前台进程组必须有一个,而且任何时刻只能有一个。

bash构建了一个会话,自己是会话前台进程组,后续如果我们自己再新启进程 或者 启动进程组,这些进程都属于bash的会话!

在命令行中启动一个进程./mytest 可以称作:在会话中启动一个进程组(可以只有一个进程),来完成某种任务,所有会话内的进程fork创建子进程,一般依旧属于当前会话! !
让某个后台进程(例如我们自己写的网络服务器进程)脱离当前会话,让它独立的在计算机中形成一个新会话,自成进程组,这种进程叫做守护进程/精灵进程。

三. 如何使服务器形成守护进程?

1.为什么需要使服务器成为守护进程

我们自己写的网络服务器进程会受到计算机上客户端或者shell的影响,即:如果我们的shell掉线了我们写的网络服务器会终止,我们电脑用户注销了,或者电脑关了,我们写的网络服务器进程都会终止,如果我们写的网络服务器成为守护进程:他脱离当前会话,让它独立的在计算机中形成一个新会话,自成进程组,他便不受计算机上客户端会话或者shell的限制,就算我们把电脑关了,shell也关了,这个服务器也会在云端一直提供服务。(这也是抖音随时打开都能刷的原因)想结束守护进程,ps axj|grep 进程名,然后kill -9 即可结束。

2.形成守护进程的核心步骤——setsid 

守护进程要编写必须调用一个函数setsid():将调用进程设置成为独立的会话 
注意:进程组的组长不可调用setsid();(组长本来就是一个会话的组长)

3.setsid 

作用:使调用setsid的进程成为一个新的会话,并成为会话内某个进程组的组长

 pid_t setsid(void);

返回值:成功返回调用进程的pid,失败返回-1错误码被设置

4.形成守护进程全步骤

(1)必做:fork+setsid()

那我如何不成为组长以便调用setsid呢?——bash中新启动第一个进程一定成为组长,所以你可以成为进程组内的第二个进程。即:常规做法:fork()子进程,子进程就不再是组长进程了,它就可以成功调用setsid(); ————

if(fork() > 0) exit(0) ;
setsid() ;        

(2)选做:

①忽略SIGPIPE信号:

系统的管道:写端一直在写,读端关闭,写端会被终止,被信号终止SIGPIPE。网络套接字同理!
网络的套接字:server向client写入,client (close) 关闭了,server也会收到SIGPIPE,server会直接被终止,为了防止服务器server异常退出,需要 忽略SIGPIPE信号

②更改守护进程的工作目录,如何更改进程的工作目录?——chdir()

(3)一般守护进程都要做的:

1. 因为守护进程与标准输入,标准输出,标准错误已经没关系了,所以close(0, 1,2) 守护进程获取输入或写入都是和网络有关,不会从键盘获取,不会往显示器输出。(很少有人这样做,因为兼容性不好,会导致代码中的打印代码报错)
2.类似于所有Linux下的一个”垃圾桶(文件黑洞)“,凡是从 /dev/null 里面读/写一概被丢弃

这些输入输出的数据会全部被丢弃:
[whb@ecs-144421 ~]$ echo "hello wrold" >> /dev/null
[whb@ecs-144421 ~]$ echo cat < /dev/null            

推荐做法:打开/dev/null, 并且对 0,1,2 进行重定向!

总结:1.忽略SIGPIPE
2.更改进程的工作目录
3.让自己不要成为进程组组长
4.设置自己是一个独立的会话
5.重定向0,1,2

5.重定向0,1,2后,可以将打印信息保存入一个文件serverTcp.log中

log.hpp中:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_239729.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

seo综合查询,怎么看网站在移动端权重高低

移动权重就是指在手机、IPAD等的流量&#xff0c;数值越大流量越多。 未来百度流量一定会更倾向于移动端&#xff0c;移动端搜索将是百度搜索引擎的主要阵地。这一点和用户上网习惯有关系&#xff0c;因为移动网络无处不在。 那么怎么看网站在移动端权重高低&#xff1f;最…

了解学习node中著名的co模块原理,生成器+promise实现async+await

***内容预警*** 新手内容&#xff0c;菜鸟必看&#xff0c;大佬请绕道 首先 co 是一个npm第三方模块&#xff0c;我们需要npm install 之后才能使用它。 作为一个菜鸟我相信你肯定没有用过这个模块&#xff0c;但是据说这个模块很有名&#xff0c;那么我们就有必要来了解一下它…

为什么企业要注重数据安全?六大优势分析

数据加密是将数据从可读格式转换为编码格式。两种最常见的加密方法是对称加密和非对称加密。这些名称是指是否使用相同的密钥进行加密和解密&#xff1a; ●对称加密密钥&#xff1a;这也称为私钥加密。用于编码的密钥与用于解码的密钥相同&#xff0c;使其最适合个人用户和封…

使用Docker搭建Nacos的持久化和集群部署

1. 准备 1.1 mysql安装 下载镜像 docker pull mysql/mysql-server:5.7 在宿主机中相关目录&#xff0c;用于挂载容器的相关数据 mkdir -p /data/mysql/{conf,data} 编写my.cnf配置文件&#xff0c;在/data/mysql/conf目录中 (或下载 直接上传即可) my.cnf.txt - 蓝奏云 / …

BIT.4 Linux进程控制

目录进程创建fork函数初识写实拷贝fork常规用法fork调用失败的原因补充知识进程终止进程退出场景进程常见退出方法exit函数与_exit函数return 退出补充知识进程等待进程等待必要性进程等待的方法wait方法waitpid方法wait / waitpid 阻塞代码WIFEXITEDwait / waitpid 非阻塞代码…

客快物流大数据项目(九十八):ClickHouse的SQL函数

文章目录 ClickHouse的SQL函数 一、​​​​​​​​​​​​​​类型检测函数

Redis集群之AKF架构原理

当我们搭建集群之前&#xff0c;先要想明白需要解决哪些问题&#xff0c;搞清楚这个之前先回想一下单节点、单实例、单机有哪些问题&#xff1f; 单点故障&#xff1a;只有一台Redis的话&#xff0c;如果出现故障&#xff0c;那么整个服务都不可用缓存容量&#xff1a;单台Red…

【Django】第一课 基于Django超市订单管理系统开发

概念 django服务器开发框架是一款基于Python编程语言用于web服务器开发的框架&#xff0c;采用的是MTV架构模式进行分层架构。 项目搭建 打开pycharm开发软件&#xff0c;打开开发软件的内置dos窗口操作命令行 在这里指定项目存放的磁盘路径&#xff0c;并使用创建django项…

54三数之和55 56有无重复元素的全排列

54 三数之和 首先想到的就是之前的两数之和&#xff0c;只要在外层遍历一遍&#xff0c;对每个元素用之前的两数之和的哈希做法&#xff0c;就刚好是O(n^2) 但是有坑的地方在于需要去重&#xff0c;并且输出的三元组也是需要顺序的&#xff01;&#xff01;然后我用set去重和重…

史上最强,这份在各大平台获百万推荐的Java核心手册实至名归

又逢“金九银十”&#xff0c;年轻的毕业生们满怀希望与忐忑&#xff0c;去寻找、竞争一个工作机会。已经在职的开发同学&#xff0c;也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而&#xff0c;面试人群众多&#xff0c;技术市场却相对冷淡&#xff0c;…

flutter 环境搭建

一、简介 Flutter 是谷歌开发的一款开源、免费的&#xff0c;基于 Dart 语言的U1框架,可以快速在i0S和Android上构建高质量的原生应用。 它最大的特点就是跨平台和高性能。Dart是由谷歌&#xff0c;在2011 年开发的计算机编程语言&#xff0c;它可以被用于Web、服务器、移动应…

服务注册配置中心Nacos

文章目录一. 前言二. 下载安装1. 下载安装包2. Windows环境安装3. Linux环境安装1. 单击模式启动2. 集群模式启动3. 远程web控制4. 注册为系统服务三. 基本使用1. 添加依赖2. 服务注册3. 配置实例集群属性4. 实例权重负载均衡5. 环境隔离6. 临时实例与非临时实例四. Nacos配置管…

python常用模块

time模块 常用操作 1.直接获取时间 time.time() #获取结果是秒数&#xff0c;即从1970年1月1日8:00起计#1671856010.9592516 2.获取结构化时间 time.localtime() #获取本地时间&#xff0c;中国为东八区&#xff0c;为上海时间 time.gmtime() …

3.2 Static Terrestrial Laser Scanners 静态地基激光扫描仪

本章节介绍的静态地基激光扫描系统指的是那些在一个固定位置的位置上对周边场景地物特征进行扫描的设备。该类型设备的扫描测量机制是&#xff0c;通过激光测距仪进行斜距测量&#xff0c;与此同时通过水平和竖直两个方向上同步运动的角度编码器来记录角度变化值&#xff08;如…

C#大型医院HIS系统源码 医院信息管理系统源码 C/S架构 VS2013+sql2012

了解更多源码内容&#xff0c;可私信我。 开发环境&#xff1a;VS2013sql2012 C/S架构 一、门诊系统&#xff1a; 1、挂号与预约系统:实现了医院门诊部挂号处所需的各种功能&#xff0c;包括门诊安排的管理&#xff0c;号表的生成及维护&#xff0c;门诊预约管理和挂号处理&…

一文带你深入理解【Java基础】· 网络编程(下)

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…

AQS学习

1.1 AQS 简单介绍 AQS 的全称为&#xff08;AbstractQueuedSynchronizer&#xff09;&#xff0c;这个类在 java.util.concurrent.locks 包下面。 AQS 是一个用来构建锁和同步器的框架&#xff0c;使用 AQS 能简单且高效地构造出应用广泛的大量的同步器&#xff0c; 比如我们提…

五、Arduino IDE开发esp8266环境搭建

1、安装驱动程序 (1)安装USB转串口驱动程序。 (2)根据板载的USB转串口驱动芯片选择合适驱动安装。USB转串口芯片负责和电脑之间进行数据通信。 (3)常见USB转串口驱动 CP210x驱动:CP210x USB 至 UART 桥 VCP 驱动器 - 芯科科技 CH340驱动 2、Arduino IDE环境搭建 要想使用Ar…

K8S-存储-Volume

问题 容器磁盘上的文件的生命周期是短暂的&#xff0c;这就使得在容器中运行重要应用时会出现一些问题。首先&#xff0c;当容器崩溃 时&#xff0c;kubelet 会重启它&#xff0c;但是容器中的文件将丢失——容器以干净的状态&#xff08;镜像最初的状态&#xff09;重新启动。…

【kafka】学习笔记(三)

学习笔记七、Kafka-Eagle 监控7.1 环境准备7.2 Eagle 安装7.3、修改配置文件7.4、添加环境变量7.5、启动Eagle八、Kafka-Kraft 模式8.1、Kafka-Kraft 集群部署8.2、初始化集群数据目录8.3、启动 kafka 集群8.4、测试8.5、集群启动脚本九、SpringBoot集成Kafka七、Kafka-Eagle 监…