进程回收

wait

原型:pid_t wait(int *wstatus);
功能:回收子进程空间
参数:wstatus:存放子进程结束状态空间的首地址
返回值:成功返回回收到的子进程的PID失败返回-1WIFEXITED(wstatus):测试进程是否正常结束
WEXITSTATUS(wstatus):获得进程退出的值
WIFSIGNALED(wstatus):测试进程是否被杀死
WTERMSIG(wstatus):获得杀死进程的编号
  • wait具有阻塞等待的功能,等到有子进程结束才会回收子进程继续向下执行
  • wait可以实现多任务得到同步

waitpid

原型:pid_t waitpid(pid_t pid, int *wstatus, int options);
功能:回收指定的子进程空间
参数:pid:要回收的进程的PID(-1表示回收任意子进程)wstatus:存放子进程结束状态空间首地址options:0    阻塞回收WNOHANG    非阻塞回收
返回值:成功返回回收到的子进程PID失败返回-1指定的子进程空间未结束,返回0waitpid(-1, NULL,0)等价于wait(NULL)
  • waitpid可以非阻塞回收子进程空间
  • waitpid可以回收指定子进程空间

1.exec函数族

1.1 exec函数族

  • 利用进程空间执行另一份代码
  • exec常搭配fork使用,fork创建新的子进程,exec让子进程执行自己的代码
extern char **environ;int execl(const char *path, const char *arg, .../* (char  *) NULL */);
int execlp(const char *file, const char *arg, .../* (char  *) NULL */);
int execle(const char *path, const char *arg, .../*, (char *) NULL, char * const envp[]*/);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],char *const envp[]);l:参数以列表的形式传递
p:在系统变量PATH对应的目录下查找文件
v:参数以指针数组的形式传递
e:执行新代码是更新环境变量

1.2 主函数传参

主函数形式

void main(void);
int main(void);
int main(int argc, const char *argv[]);
int main(int argc, const char **argv);argc:传入参数的个数
argv:存放每一个传入参数指针的数组名argv[0] = "./a.out"
argv[1] = "hello"
argv[2] = "world"
argv[3] = "how"
argv[...] = ...
argv[argc] = ...

1.3 sytem函数

原型:int system(const char *command);
功能:在代码运行command命令
参数:command:shell命令字符串首地址
返回值:成功返回0失败返回-1

2.线程

2.1 基本概念

线程是一个轻量级的进程

  • 线程本质就是一个进程
  • 线程和进程不完全一致,轻量指空间,进程空间和线程空间空间管理方法不同

2.2 进程和线程的区别

  • 线程本质是进程,线程是任务创建、调度、回收的过程
  • 进程空间:文本段 + 数据段 + 系统数据段
  • 线程空间:

1.线程必须位于进程空间内部,没有进程,线程无法独立存在

2.一个进程中的所有线程共享文本段 + 数据段 + 堆区,独享栈区

3.线程独享的栈区默认8M

4.一个进程中的多个线程切换调度任务时,资源开销少

  • 进程和线程的区别

1.线程是CPU任务调度的最小单元

2.进程是操作系统资源分配的最小单元

2.3 多进程和多线程的优缺点

1.多线程和多进程对比:

场景多进程多线程对比
效率多进程切换需要重新映射物理地址,占用资源开销较大多线程在同一进程空间内部切换任务,占用资源开销较小多线程 > 多进程
通信多进程没有共享空间,需要使用进程间通信的方法来完成通信多线程有共享空间,只需要定义共享空间变量完成数据交换即可实现通信多线程 > 多进程
资源竞争多进程没有共享空间,不存在资源竞争多线程使用共享空间,需保证资源使用的互斥性,防止多线程对共享资源产生竞争多进程 > 多线程
安全多进程空间独立,一个进程的崩溃不会影响其余进程多线程共用一个进程空间,一个线程异常崩溃,可能引发进程异常退出,导致其余线程也无法执行多进程 > 多线程

2.4 线程的调度

与进程调度保持一致

宏观并行,微观串行

2.5 线程的消亡

线程结束需要回收线程空间,否则会产生僵尸线程

2.6 线程的函数接口

1.函数接口

进程接口线程接口
forkpthread_creat
exitpthread_exit
waitpthread_join

pthread_creat

原型:int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
功能:在进程中创建一个线程
参数:thread:存放线程ID空间的首地址attr:线程的属性,默认属性NULLstart_routine:线程函数的入口arg:线程传入的参数
返回值:成功返回0失败返回错误码

pthread_self

原型:pthread_t pthread_self(void);
功能:获得调用该函数的ID号

pthread_exit

原型:void pthread_exit(void *retval)
功能:结束当前线程任务
参数:retval:线程结束的值

pthread_join

原型: int pthread_join(pthread_t thread, void **retval);
功能:回收线性空间
参数:thread:要回收的线程的IDretval:存放线程结束状态空间的首地址
返回值:成功返回0失败返回错误码
  • tid对应的线程只要不退出,pthread_join 阻塞等待结束回收线程空间
  • pthread_join具备同步的功能

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

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

相关文章

大模型微调分布式训练-大模型压缩训练(知识蒸馏)-大模型推理部署(分布式推理与量化部署)-大模型评估测试(OpenCompass)

大模型微调分布式训练 LLama Factory与Xtuner分布式微调大模型 大模型分布式微调训练的基本概念 为什么需要分布式训练? 模型规模爆炸:现代大模型(如GPT-3、LLaMA等)参数量达千亿级别,单卡GPU无法存储完整模型。 …

物联网、大数据与云计算持续发展,楼宇自控系统应用日益广泛

在深圳某智慧园区的控制中心,管理人员通过云端平台实时监控着5公里外园区内每台空调的运行参数、每盏路灯的开关状态和每个区域的能耗数据。当系统检测到某栋楼宇的电梯运行振动异常时,大数据算法自动预判可能的故障点并推送维修建议;物联网传…

在实验室连接地下车库工控机及其数据采集设备

在实验室连接地下车库工控机及其数据采集设备 我们小组为项目的数据采集组,目前在车顶集成了一个工控机、两个激光雷达、两个摄像头、一个户外电源 由于地下车库蚊子太多了,我们可受不了这个苦,所以想坐在实验室吹着空调就能连接工控机来修改…

icmpsh、PingTunnel--安装、使用

用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技…

系统思考:情绪内耗与思维模式

我们正在努力解决的问题,很多时候,根源就在我们自己。 在日常的工作和生活中,我们常常感到焦虑、内耗和失控。这些情绪和状态,似乎总是在不断循环。但如果停下来仔细思考,会发现,问题的背后,并不…

详解grafana k6 中stage的核心概念与作用

在Grafana k6中,​​Stage(阶段)​​ 是负载测试脚本的核心配置概念,用于动态控制虚拟用户(VUs)的数量随时间的变化。通过定义多个阶段,用户可以模拟真实场景中的流量波动(如用户逐步…

JS 和 JSX 的区别

JS 和 JSX 是两种不同的概念,尽管它们都与 JavaScript 密切相关,尤其是在 React 开发中。以下是它们的主要区别:1. 定义JS (JavaScript): 一种通用的编程语言,用于开发动态网页、服务器端应用程序等。它是标准的 ECMAScript 语言。…

Linux软件编程-进程(2)及线程(1)

1.进程回收资源空间&#xff08;1&#xff09;wait函数头文件&#xff1a;#include <sys/types.h>#include <sys/wait.h>函数接口&#xff1a;pid_t wait(int *wstatus);功能&#xff1a;阻塞等待回收子进程的资源空间参数&#xff1a;wstatus &#xff1a;保存子进…

java 集合 之 集合工具类Collections

前言早期开发者经常需要对集合进行各种操作比如排序、查找最大最小值等等但是当时没有统一的工具类来处理所以导致代码重复且容易出错java.util.Collections 工具类的引入为开发者提供了大量 静态方法 来操作集合它就像一个经验丰富的助手和数组工具类 Arrays 一样避免了我们重…

2025 年电赛 C 题 发挥部分 1:多正方形 / 重叠正方形高精度识别与最小边长测量

2025 年全国大学生电子设计竞赛 C 题 发挥部分 1&#xff1a;多正方形 / 重叠正方形高精度识别与最小边长测量 香橙派 OpenCV C 全流程解析 目录 赛题背景与需求技术难点全景图系统总体架构硬件平台与接线软件架构与线程模型算法流水线逐帧拆解 6.1 图像预处理6.2 轮廓提取与…

【自动驾驶】自动驾驶概述 ② ( 自动驾驶技术路径 | L0 ~ L5 级别自动驾驶 )

文章目录一、自动驾驶技术路径1、L0 级别 自动驾驶2、L1 级别 自动驾驶3、L2 级别 自动驾驶4、L3 级别 自动驾驶5、L4 级别 自动驾驶6、L5 级别 自动驾驶一、自动驾驶技术路径 美国汽车工程师学会 ( SAE ) 将 自动驾驶 分为 L0 ~ L5 六个级别 : 其中 L0 级别 是 完全手动 , L5…

C++少儿编程(二十二)—条件结构

1.理解条件结构小朋友们&#xff0c;今天让我们一起来探索一个神奇而有趣的知识——程序的条件结构&#xff01;首先&#xff0c;让我们来想象一个有趣的场景。比如说&#xff0c;你们正在准备去公园玩耍。在出发之前&#xff0c;你们会看看天气怎么样。如果天气晴朗&#xff0…

Ubuntu20.04下Px4使用UORB发布消息

1 .msg文件夹定义数据类型及 变量名文件位置如图&#xff0c;在PX4-Autopilot/msg文件夹下&#xff0c;笔者创建的文件名为gps_msg.msggps_msg.msg内容如下 uint64 timestamp # 时间戳 float32 latitude float32 longitude float32 altitude 同时&#xff0c;在CM…

three.js学习记录(第二节:鼠标控制相机移动)

效果展示&#xff1a; 鼠标控制一、鼠标控制 - 轨道控制器&#xff08;OrbitControls&#xff09; 1. 从nodeModules中导入OrbitControls&#xff0c;OrbitControls 是一个附加组件&#xff0c;必须显式导入 import { OrbitControls } from "three/examples/jsm/controls/…

Shortest Routes II(Floyd最短路)

题目描述There are n cities and m roads between them. Your task is to process q queries where you have to determine the length of the shortest route between two given cities.输入The first input line has three integers n, m and q: the number of cities, roads…

分享一个基于Hadoop的二手房销售签约数据分析与可视化系统,基于Python可视化的二手房销售数据分析平台

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Spark、hadoop、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题…

STM32的PWM

PWM作为硬件中几乎不可或缺的存在&#xff0c;学会 PWM&#xff0c;等于打通了 STM32 的“定时器体系”。学一次&#xff0c;STM32 全系列&#xff08;甚至 AVR、PIC、ESP32&#xff09;都能通用。硬件只要一个 I/O 就能驱动功率模块&#xff0c;非常省成本。不会 PWM&#xff…

OpenCompass傻瓜式入门教程

文章目录1 我也许不是傻瓜&#xff0c;却只想做个傻瓜2 环境要求3 安装3.1 下载源码3.2 创建虚拟环境3.3 安装4 下载数据5 查看支持的模型和数据集6 评测6.1 指定模型路径6.2 指定配置文件6.2.1 评测本地qwen2.5模型6.2.1.1 查看opencompass支持的qwen2.5模型6.2.1.2 创建配置文…

【软件测试】电商购物项目-各个测试点整理(三)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、优惠券的测试点…

流处理、实时分析与RAG驱动的Python ETL框架:构建智能数据管道(上)

> **2025年某电商大促,每秒20万订单涌入系统**——他们的风控团队仅用**47毫秒**就识别出欺诈交易。背后的秘密武器,正是融合流处理、实时分析与RAG的下一代Python ETL框架。 ### 一、范式革命:从批处理到AI增强的ETL 4.0 #### 1.1 数据处理演进史 ```mermaid graph LR …