【网络编程】多进程服务器端

并发服务器的实现

  • 多进程服务器:通过创建多个进程提供服务
  • 多路复用服务器:通过捆绑并统一管理IO对象提供服务。
  • 多线程服务器:通过生成与客户端等量的线程提供服务。、

理解进程process

定义:占用内存空间的正在运行的程序。

CPU核和进程数:1个CPU 中可能包含多个运算设备( 核 )。核的个数与可同时运行的进程数相同。相反,若进程数超过核数,进程将分时使用 CPU 资源。但因为CPU 运转速度极快,我们会感到所有进程同时运行。。

进程ID:所有进程都会从操作系统分配到ID。其值为大于2的整数,1要分配给操作系统启动后的首个进程。

调用fork函数创建进程

#include<unisted.h>
pid_t fork(void);

fork函数创建调用的进程副本。

父进程fork函数返回子进程ID,子进程返回0。

进程和僵尸进程

进程完成工作后(执行完mian函数)应被销毁,但有时这些进程将编程僵尸进程,占用系统中重要资源。

产生僵尸进程的原因:1、传递参数并调用exit函数;2、mian函数中执行return语句并返回值。

向exit函数传递的参数值和main函数的retum语句返回的值都会传递给操作系统。而操作系统不会销毁子进程,直到把这些值传递给产生该子进程的父进程。处在这种状态下的进程就是僵尸进程。也就是说,将子进程变成僵尸进程的正是操作系统。

“应该向创建子进程的父进程传递子进程的exit参数值戒return语句的返回值。”
只有父进程主动发起请求(函数调用)时,操作系统才会传递这些值。换言之,如果父进程未主动要求获得子进程的结束状态值,操作系统将一直保存,并让子进程长时间处于僵尸进程状态。。

销毁僵尸进程1:wait函数

父进程应主动请求获取子进程的返回值

#include<sys/wait.h>
pid_t wait(int *statloc);

因为子进程函数参数指向单元还包含其他信息,因此要通过下列宏分离:
WIFEXITED子进程正常终止时返回真,WEXITSTATUS返回子进程返回值。即,向wait函数传递变量status的地址时,调用wait函数应编写代码:

if(WIFEXITED){
    puts("Normal termination!");
    print("child pass num:%d",WEIXTSTATUS(status));
}

销毁僵尸进程2:waitpid函数

#include<sys/wait.h>
pid_t waitpid(pid_t pid, int *statloc, int options);

信号处理

子进程何时终止?父进程和子进程一样繁忙,不能只调用waitpid函数等待子进程终止。

向操作系统求助子进程终止识别主体是操作系统。若操作系统能传递信息有助于构建高效的程序。引入信号处理机制。

信号与singnal函数,进程发现自己的子进程结束时,请求操作系统调用特定函数。

#include<singnal.h>
void (*signal(int signo, void(*func)(int)))(int);

待续.................................................

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

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

相关文章

电机控制安全:PWM 直通

在 H 桥中使用互补 PWM 时的一个主要考虑因素是短路的可能性&#xff0c;也称为“击穿”。 如图 5 所示&#xff0c;如果同一支路上的两个开关同时打开&#xff0c;H 桥配置可能会导致电源和接地之间发生直接短路。 如果同一条腿上的两个开关同时打开&#xff0c;则可能会发生…

ConcurrentHashMap如何保证线程安全?

ConcurrentHashMap 是 HashMap 的多线程版本&#xff0c;HashMap 在并发操作时会有各种问题&#xff0c;比如死循环问题、数据覆盖等问题。而这些问题&#xff0c;只要使用 ConcurrentHashMap 就可以完美解决了&#xff0c;那问题来了&#xff0c;ConcurrentHashMap 是如何保证…

EvaluLLM: LLM Assisted Evaluation of Generative Outputs论文阅读

Abstract 随着大型语言模型&#xff08;LLM&#xff09;能力的迅速提升&#xff0c;衡量自然语言生成&#xff08;NLG&#xff09;系统输出质量变得越来越困难。传统的指标如BLEU和ROUGE依赖于参考数据&#xff0c;通常不适用于需要创造性或多样化输出的任务。人工评估是一种选…

救命!接手了一个老项目,见到了从业10年以来最烂的代码!

后台回复“书籍”&#xff0c;免费领取《程序员书籍资料一份》 后台回复“5000”&#xff0c;免费领取面试技术学习资料一份 在程序员这个行业从业快10年了&#xff0c;每过几个月回头看看自己写的代码&#xff0c;都会觉得写的也太烂了&#xff0c;不敢想象是自己之前写的。…

官网首屏:太漂亮了,真是着了它的魔,上了它的道。

大气的企业官网致力于提供用户友好的界面和优质的用户体验。网页经过精心设计和开发&#xff0c;旨在展示客户的品牌形象和产品信息&#xff0c;并为用户提供便捷的服务和沟通渠道。 官网设计追求简洁、美观、易用的原则&#xff0c;以吸引用户的注意力并提供清晰的导航和信息…

【文档智能 RAG】RAG增强之路-智能文档解析关键技术难点及PDF解析工具PDFlux

前言 在私域知识问答和企业知识工程领域&#xff0c;结合Retrieval-Augmented Generation&#xff08;RAG&#xff09;模型和大型语言模型&#xff08;LLM&#xff09;已成为主流方法。然而&#xff0c;企业中存在着大量的PDF文件&#xff0c;PDF解析的低准确性显著影响了基于…

git配置3 - 一个git仓库同时push到多个代码托管平台

1. 应用场景2. 单个代码托管平台时3. 多个代码托管平台时 3.1. 在github上创建一个项目3.2. 添加远端仓库关联3.3. 查看关联的远端仓库3.4. 推送代码到github 1. 应用场景 场景一&#xff1a; 你有一个开源的项目&#xff0c;你希望托管到多个开源代码托管平台。比如github…

springer 在线投稿编译踩坑

springer投稿&#xff0c;在线编译踩坑总结 注意&#xff1a; 有的期刊需要双栏&#xff0c;而预定义的模板中可能为单栏&#xff0c;需要增加iicol选项。 例如&#xff1a; \documentclass[sn-mathphys-num]{sn-jnl}% —>\documentclass[sn-mathphys-num, iicol]{sn-jnl}…

关于BERT和embedding

embedding到一个低维向量&#xff0c;但是需要回到onehot高维表示&#xff0c;所以大部分填词游戏最后都需要加上一个MLP接头。 word2vec如此简单的结构&#xff0c;学习到的是embedding 基于计数的统计方法和word2vec融合就形成了glove词嵌入模型 总结&#xff1a;通过各种…

新版嘎嘎快充互联互通系统配置文档

宝塔环境配置 登录宝塔账号&#xff0c;安装nginx、mysql5.7、php7.2、supervisor、redisphp安装扩展&#xff1a; 1&#xff09;安装swooleloader72 将嘎嘎官方提供的swoole_loader_72_nts.so文件上传到 /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718…

openGauss学习笔记-300 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQL Rewriter SQL语句改写

文章目录 openGauss学习笔记-300 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQL Rewriter SQL语句改写300.1 概述300.2 使用指导300.2.1 前提条件300.2.2 使用方法示例300.3 获取帮助300.4 命令参考300.5 常见问题处理openGauss学习笔记-300 openGauss AI特性-AI…

数智教育创新如何向未来?腾讯云与你探索革新之路

引言 随着科技革命的快速发展&#xff0c;掀起教育领域的变革&#xff0c;新理念、新技术、新模式、新应用正不断涌现&#xff0c;正塑造着教育的未来形态。未来科技还将如何赋能教育创新&#xff1f; 5月31日&#xff0c;由腾讯云TVP 与西安电子科技大学联合举办的「数智教育的…

618洗地机全网热门推荐,跟着买错不了

步入酷热夏天&#xff0c;家中的清洁工作也迎来了新的挑战。天气炎热&#xff0c;细菌、异味滋生的困扰让日常打扫变得不再轻松&#xff0c;这时一台高性能的洗地机就成了提升生活品质的必备良品。不同于洗地机的技术与类别繁多&#xff0c;洗地机虽原理不复杂&#xff0c;但在…

JProfiler 性能分析案列——dump.hprof 堆内存快照文件分析排查内存溢出

在 windows 环境下实现。 一、配置 JVM 参数 配置两个 JVM 参数&#xff1a; -XX:HeapDumpOnOutOfMemoryError&#xff0c;配置这个参数&#xff0c;会在发生内存溢出时 dump 生成内存快照文件&#xff08;xxx.hprof&#xff09;-XX:HeapDumpPathF:\logs&#xff0c;指定生成…

04.VisionMaster 机器视觉找圆工具

VisionMaster 机器视觉找圆工具 定义 先检测出多个边缘点然后拟合成圆形&#xff0c;可用于圆的定位与测量 注意&#xff1a;找圆工具 最好和【位置修正】模块一起使用。具体可以看下面的示例。 参数说明&#xff1a; 扇环半径&#xff1a;圆环ROI的内外圆半径 边缘类型&a…

C51学习归纳13 --- AD/DA转换

AD/DA转换实现了计算机和模拟信号的连接&#xff0c;扩展了计算机的应用场景&#xff0c;为模拟信号数字化提供了底层支持。 AD转换通常是多个输入通道&#xff0c;使用多路选择器连接到AD开关&#xff0c;实现AD多路复用的目的&#xff0c;提高利用率。 AD/DA转换可以使用串口…

Python也能“零延迟“通信吗?ZeroMQ带你开启高速模式!

目录 1、零基础入门ZeroMQ 🚀 1.1 ZeroMQ简介与安装 1.2 基础概念:Socket类型详解 1.3 实战演练:Hello World示例 2、深入浅出消息模式 🔌 2.1 请求-应答模式( REQ/REP ) 2.2 发布-订阅模式( PUB/SUB ) 2.3 推送-拉取模式( PUSH/PULL ) 3、Python实战ZeroM…

这个网站有点意思,可做SPRINGBOOT的启动图

在 SpringBoot 项目的 resources 目录下新建一个 banner.txt 文本文件&#xff0c;然后将启动 Banner 粘贴到此文本文件中&#xff0c;启动项目&#xff0c;即可在控制台展示对应的内容信息。 下面这个工具很好用&#xff0c;收藏精哦

太阳光模拟器辐照不均匀性对涂层材料测试的影响

太阳光模拟器辐照不均匀性对涂层材料测试的影响 太阳光模拟器的辐照不均匀性对涂层材料的测试结果有显著影响。具体来说&#xff0c;辐照不均匀性可能导致以下几个方面的问题&#xff1a; 光谱分布不均匀 如果太阳光模拟器的光谱分布不均匀&#xff0c;那么模拟出的光谱与实际…

VirtualBox配置双网卡实现宿主机和虚拟机相互访问以及虚拟机外网访问

目录 一&#xff1a;背景 二&#xff1a;实现 三&#xff1a;总结 一&#xff1a;背景 在VirtualBox中配置虚拟机以实现本地主机远程登录、访问外网以及虚拟机之间的相互访问&#xff0c;是一种常见的虚拟化实践&#xff0c;适用于多种场景&#xff0c;如开发、测试和远程工…