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

并发服务器的实现

  • 多进程服务器:通过创建多个进程提供服务
  • 多路复用服务器:通过捆绑并统一管理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);

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

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

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

相关文章

【人工智能】深度解读 ChatGPT基本原理

ChatGPT是OpenAI开发的一种基于人工智能技术的自然语言处理工具&#xff0c;它代表了自然语言处理&#xff08;NLP&#xff09;技术的前沿进展。ChatGPT的基本原理建立在一系列先进技术和方法之上&#xff0c;主要包括GPT&#xff08;Generative Pre-trained Transformer&#…

wegame启动游戏错误代码126,加载x3daudio1_7.dll失败怎么解决

x3daudio1_7.dll是一个重要的动态链接库文件&#xff0c;属于Microsoft DirectX SDK的一部分&#xff0c;主要服务于音频处理领域&#xff0c;特别是在游戏和多媒体应用程序中提供高级的3D音频效果。 基本属性与功能 文件名称&#xff1a;x3daudio1_7.dll 类型&#xff1a;动…

YOLO-World:开启实时开放词汇目标检测的新篇章

目标检测作为计算机视觉领域的基石之一&#xff0c;其发展一直备受学术界和工业界的关注。传统的目标检测方法通常受限于固定词汇表的约束&#xff0c;即只能在预定义的类别集合中进行检测。然而&#xff0c;现实世界中的对象种类繁多&#xff0c;远远超出了任何固定词汇表的覆…

MySQl基础入门⑯【操作视图】完结

上一边文章内容 表准备 CREATE TABLE Students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),email VARCHAR(255),major VARCHAR(100),score int,phone_number VARCHAR(20),entry_year INT,salary DECIMAL(10, 2) );数据准备 INSERT INTO Students (id, name, ema…

windows修改hosts文件、windows刷新dns缓存

文章目录 一、windows修改hosts文件 一、windows修改hosts文件 &#xff08;1&#xff09;定位hosts文件&#xff1a;首先&#xff0c;需要找到hosts文件的位置。它通常位于C:\Windows\System32\drivers\etc\目录下。 &#xff08;2&#xff09;以管理员身份运行记事本&#x…

linux 当前登录用户的常用操作命令

在 Linux 系统中&#xff0c;以下是一些用于管理当前登录用户的常用操作命令&#xff1a; 查看当前登录用户&#xff1a; who&#xff1a;显示当前登录系统的用户信息。w&#xff1a;显示当前登录用户的详细信息&#xff0c;包括用户、终端、登录时间等。 切换用户&#xff1a;…

Python 库PySpark,一个超级强大的数据处理引擎

目录 01初识 PySpark 为什么选择 PySpark? 安装 PySpark 配置 PySpark 02基本操作 创建 RDD 基本 RDD 操作 03DataFrame 和 Spark SQL 创建 DataFrame 基本 DataFrame 操作 使用 Spark SQL 04机器学习与流处理 …

UltraEdit电脑版下载_UltraEdit文本编辑器中文版下载_UltraEdit 2024最新版软件安装包下载附加详细安装步骤

UltraEdit中文版是一款功能强大的文本编辑器&#xff0c;几乎可以满足你所有的工作需求。使用UltraEdit文本编辑器可以操作更多记事本所不能处理的工作。如&#xff1a;基本的编辑文本、十六进制、ASCLL码、语法加亮、代码折叠、代码单词拼写检查等、C 及 VB 指令突显等,附有 H…

Java 8 Stream API与日期时间处理:按年月日分组

在Java 8中&#xff0c;Stream API提供了一种高效且表达式丰富的方式来处理集合数据。当我们需要对集合中的对象进行分组时&#xff0c;Collectors.groupingBy 是一个非常实用的工具。此外&#xff0c;Java 8引入的新日期时间API&#xff08;位于 java.time 包中&#xff09;让…

证明 几何分布 的期望和方差

几何分布 几何分布&#xff08;Geometric Distribution&#xff09;描述了在进行一系列独立的伯努利试验时&#xff0c;第一次成功所需的试验次数。假设每次试验成功的概率为 ( p )&#xff0c;则几何分布的概率质量函数&#xff08;PMF&#xff09;为&#xff1a; P ( X k )…

mongo工具篇 --- mongostats

一、使用 1、安装 安装链接 2、命令参数 -h&#xff0c;–host hostname&#xff1a;指定MongoDB主机名和端口&#xff0c;例如&#xff1a;-h localhost:12017&#xff0c;默认-a&#xff0c;–authenticationMechanism mechanism&#xff1a;指定认证机制-u&#xff0c…

分享三个仓库

Hello , 我是恒。大概有半个月没有发文章了&#xff0c;都写在文档里了 今天分享三个我开源的项目&#xff0c;比较小巧但是有用 主页 文档导航 Github地址: https://github.com/lmliheng/document 在线访问:http://document.liheng.work/ 里面有各种作者书写的文档&#xff…

Midjourney v6 快速入门指南

Midjourney V6快速入门教程来了&#xff0c;这是Midjourney的AI图像生成器的又一次令人印象深刻的升级。最显著的是&#xff0c;V6在逼真渲染和图像中的文字功能方面取得了重大进展。 在这篇文章中&#xff0c;我们将探讨如何开始使用Midjourney V6&#xff0c;并提供一些示例…

技术分析:开源大模型的兴起与热门项目推荐

技术分析&#xff1a;开源大模型的兴起与热门项目推荐 引言 随着人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;开源大模型成为了许多程序员和研究人员关注的焦点。开源项目不仅促进了技术的快速迭代和普及&#xff0c;还为更多的人提供了学习和实践的机会。…

软件设计师笔记-计算机系统基础知识

CPU的功能 CPU(中央处理器)是计算机的核心部件,负责执行计算机的指令和处理数据。它的功能主要可以分为程序控制、操作控制、时间控制和数据处理四个方面: 程序控制:CPU的首要任务是执行存储在内存中的程序。程序控制功能确保CPU能够按照程序的指令序列,一条一条地执行。…

AI 视频生成工具 Sora 横空出世!一文带你了解 Sora:简介|主要功能|使用场景|平替工具等!

要说最近的头条热搜&#xff0c;非 Sora 莫属&#xff01;Sora 的诞生&#xff0c;再一次引发了人们对 AI 人工智能以及 AIGC 的关注。 对第一次听说 Sora 的人&#xff0c;可能会好奇&#xff0c;大家都在说的 Sora 是什么&#xff1f; Sora 是什么软件&#xff1f; Sora&a…

python flask配置数据库并进行orm操作 flask_sqlalchemy

&#x1f308;所属专栏&#xff1a;【Flask】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

013.随机指纹chromium编译-如何通过传参来固定指纹

随机指纹chromium编译-如何通过传参来固定指纹 由于要所有的类型的指纹都实现固定&#xff0c;工作量太大&#xff0c;这里我只用plugins指纹作为示例。 一、为什么要固定指纹 目标&#xff1a;启动浏览器时&#xff0c;加上参数--fingerprints"xxxxxxx", 参数变化时…

基于Spring Boot+VUE毕业生信息招聘平台

系统详细设计 1管理员功能模块 管理员登录&#xff0c;管理员通过输入用户名、密码、角色等信息进行系统登录&#xff0c;如图1所示。 图1管理员登录界面图 管理员登录进入毕业生信息招聘平台可以查看首页、个人中心、企业管理、空中宣讲会管理、招聘岗位管理、毕业生管理、个…

jEasyUI 转换 HTML 表格为数据网格

jEasyUI 转换 HTML 表格为数据网格 jEasyUI 是一个基于 jQuery 的框架,它为用户提供了一套完整的用户界面组件,使得网页开发变得更加简单快捷。在本文中,我们将探讨如何使用 jEasyUI 将一个普通的 HTML 表格转换为功能丰富的数据网格(datagrid)。 为什么使用数据网格? …