Linux 进程、线程与 exec/系统调用详解

1. waitwaitpid —— 子进程资源回收

1.1 wait

pid_t wait(int *wstatus);

功能:阻塞等待,回收任意子进程的资源空间。

参数

   wstatus:保存子进程退出状态的变量地址

   NULL:不保存退出状态

返回值

        成功:返回回收的子进程 PID

        失败:返回 -1

1.2 waitpid

pid_t waitpid(pid_t pid, int *status, int options);

功能:回收指定子进程的资源,功能比 wait 更灵活。

参数

pid

   < -1:回收指定进程组内的任意子进程例如 -100 表示等待 GID=100 的进程组

   -1:回收任意子进程(组内外)

   0:回收与当前调用者同一组的所有子进程

   > 0:回收指定 PID 的子进程

status

       保存子进程退出状态NULL:不关心退出状态

options

   0:阻塞等待WNOHANG:非阻塞等待

返回值

        成功:返回回收的子进程 PID

        失败:-1

        非阻塞模式下且没有子进程退出:返回 0

1.3 子进程资源回收策略

  1. wait 阻塞回收:父进程专门等待子进程退出

  2. waitpid 非阻塞回收:配合轮询实现

  3. 不回收:子进程一直运行

  4. 异步回收:子进程退出时通知父进程回收

2. exec 函数族 —— 在当前进程中执行其他程序

2.1 execl

int execl(const char *path, const char *arg, ... /* (char  *) NULL */);

功能:执行指定路径的可执行文件。
本质:将当前进程的代码段替换成新程序,不创建新进程。

参数

  path:可执行文件路径

  arg:传给程序的参数,第一个参数一般是程序名

  NULL:参数结束标志

返回值

        成功:无返回(被新程序替换)

        失败:-1

2.2 execlp

int execlp(const char *file, const char *arg, ... /* (char  *) NULL */);

功能:从 PATH 环境变量指定的目录中查找可执行文件。

2.3 execle

int execle(const char *path, const char *arg, ..., (char *) NULL, char *const envp[]);

功能:指定环境变量执行新程序。

2.4 execv

int execv(const char *path, char *const argv[]);

功能:与 execl 类似,但用 数组 传递参数。

2.5 execvp

int execvp(const char *file, char *const argv[]);

功能:与 execlp 类似,但用 数组 传递参数。

2.6 execvpe

int execvpe(const char *file, char *const argv[], char *const envp[]);

功能:结合 PATH 搜索 + 指定环境变量。

3. system —— fork + exec 封装

int system(const char *command);

功能:调用 fork() 创建子进程,并在子进程中执行 exec 族函数。

区别

   exec:不创建新进程,直接替换当前进程代码

   system:先 fork 再 exec,创建新的进程

4. 线程基础

4.1 线程概念

线程:轻量级进程,是 CPU 调度的最小单位

进程:操作系统资源分配的最小单位

4.2 进程 vs 线程

特性进程线程
调度单位资源分配最小单位CPU 调度最小单位
资源消耗创建需分配独立虚拟地址空间(0~4G)仅分配栈空间(默认 8M)
通信方式需 IPC 机制可直接共享全局变量
安全性高,地址空间隔离低,可能相互影响
创建速度较慢较快

4.3 线程创建

#include <pthread.h>int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);

参数

  thread:线程 ID 存放位置

  attr:线程属性(NULL 表示默认)

  start_routine:线程入口函数

  arg:传递给线程入口函数的参数

返回值

        成功:0

        失败:非 0

4.4 常用线程函数

pthread_self();   // 获取当前线程 ID
pthread_exit();   // 线程主动退出
pthread_join();   // 回收线程资源

总结

wait / waitpid 用于子进程资源回收

exec 族函数用于执行新程序,不会创建新进程

system 封装了 fork + exec

线程是轻量级进程,开销小但安全性低

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

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

相关文章

Laravel 使用ssh链接远程数据库

1.创建ssh ssh -i ./id_rsa -N -L 13306:127.0.0.1:3306 -p 22 root***对上述代码的解释&#xff1a; 命令是一个SSH隧道命令&#xff0c;用于将本地端口3306转发到远程服务器上的3306端口。以下是命令的详细解释&#xff1a;# 调用SSH客户端。 ssh # 指定用于身份验证的私钥文…

Python延申内容(一)

1.技术面试题 &#xff08;1&#xff09;TCP与UDP的区别是什么&#xff1f; 答&#xff1a; TCP&#xff08;传输控制协议&#xff09;&#xff1a;面向连接、可靠传输&#xff08;数据完整有序&#xff09;、流量控制、拥塞控制&#xff0c;适用于文件传输、网页浏览等场景。 …

Java 9 新特性及具体应用

目录 1. 模块系统&#xff08;Jigsaw&#xff09; 2. JShell&#xff08;REPL工具&#xff09; 3. 集合工厂方法 4. 接口私有方法 5. Stream API 增强 6. HTTP/2 客户端&#xff08;Incubator&#xff09; 7. 多版本JAR包 总结 1. 模块系统&#xff08;Jigsaw&#xff0…

第二十五天:构造函数/析构函数/拷贝构造

构造函数/析构函数/拷贝构造 1. 构造函数&#xff08;Constructor&#xff09; 定义与作用&#xff1a;构造函数是一种特殊的成员函数&#xff0c;其名称与类名相同&#xff0c;没有返回类型&#xff08;包括 void 也没有&#xff09;。它的主要作用是在创建对象时初始化对象的…

【P14 3-6 】OpenCV Python——视频加载、摄像头调用、视频基本信息获取(宽、高、帧率、总帧数),视频保存在指定位置

文章目录1 读取本地视频1.1 绝对路径 6种方式1.2 相对路径 4种方式1.3 读取本地视频2 视频基本信息3 调用摄像头 并将视频保存在指定位置P14 3-6 1 读取本地视频 现在要读取本地视频“video.mp4”&#xff0c; 视频文件“video.mp4”和playVideo.py脚本文件&#xff0c;都在…

【DL学习笔记】常用数据集总结

一、如何找数据集 paperswithcode&#xff0c;但好像没了 AutoDL Roboflow Kaggle Hungging Face 百度飞浆PP AIStudio 二、目标检测数据集格式 常用数据集坐标格式 MSCOCO &#xff1a; 坐标格式&#xff08;x&#xff0c;y&#xff0c;w&#xff0c;h&#xff…

19.3 Transformers量化模型极速加载指南:4倍推理加速+75%显存节省实战

Transformers量化模型极速加载指南:4倍推理加速+75%显存节省实战 实战项目:模型量化 Transformers 兼容性配置 量化模型加载核心配置逻辑 #mermaid-svg-rDjfMigtxckLYWp3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#merm…

Android 终端接入 GB28181 国标视频平台的完整解决方案解析

1. 引言&#xff1a;让 Android 终端无缝融入国标视频网络在公安、交通、应急、工业、教育等领域&#xff0c;GB/T 28181 国标协议早已成为视频监控与指挥调度的事实标准。传统国标视频网络通常由固定部署的 IPC 摄像机、NVR、视频管理平台构成&#xff0c;设备形态单一。随着一…

Docker目录的迁移

# 迁移 docker 目录 &#xff08;无论容器与镜像占用空间大小&#xff0c;哪怕只占用1G&#xff0c;也需用此方式&#xff0c;否则可能迁移不成功&#xff09;service docker stopcd /var/lib/docker# 一个一个复制除 overlay2 外的其他所有文件夹cp -R builder /home/docker/l…

IOS APP 前端存储

UserDefaults优点简单易用提供简单的键值对存储接口无需复杂配置&#xff0c;开箱即用适合存储少量简单数据轻量级专门为存储小量数据设计内存占用小性能开销低自动持久化数据自动保存到磁盘应用重启后数据仍然可用通过synchronize()方法可以强制立即写入&#xff08;iOS 12已自…

在前端js中使用jsPDF或react-to-pdf生成pdf文件时,不使用默认下载,而是存储到服务器

开源地址&#xff1a; https://github.com/ivmarcos/react-to-pdf 主要就是这个方法&#xff0c;有三种可选&#xff1a; 默认是save&#xff0c;也就是会自动触发下载的方法&#xff0c;open方法是默认会打开一个pdf预览的tab页面&#xff0c;build方法就是在调用的函数gener…

会议征稿!IOP出版|第二届人工智能、光电子学与光学技术国际研讨会(AIOT2025)

往届已EI检索&#xff0c;欢迎投稿&#xff01; AIOT2024会后两个月实现见刊&#xff01; AIOT2025已通过IOP-JPCS出版申请&#xff0c;独立JPCS出版 AIOT2025已上线西安文理学院官网&#xff1a; 征文通知&#xff5c;第二届人工智能、光电子学与光学技术国际…

CPP多线程2:多线程竞争与死锁问题

在多线程编程中&#xff0c;多个线程协同工作能显著提升程序效率&#xff0c;但当它们需要共享和操作同一资源时&#xff0c;潜在的问题也随之而来&#xff1b;线程间的执行顺序不确定性可能导致资源竞争&#xff0c;可能引发死锁&#xff0c;让程序陷入停滞。 多线程竞争问题示…

全国产飞腾d2000+复旦微690t信号处理模块

UD VPX-404是基于高速模拟/数字采集回放、FPGA信号实时处理、CPU主控、高速SSD实时存储架构开发的一款高度集成的信号处理组合模块&#xff0c;采用6U VPX架构&#xff0c;模块装上外壳即为独立整机&#xff0c;方便用户二次开发。 UD VPX-404模块的国产率可达到100%&#xff0…

物联网 (IoT) 的顶级硬件平台

物联网 &#xff08;IoT&#xff09; 的顶级硬件平台IoT&#xff08;物联网&#xff09;不再是一个流行词。随着每天出现几个鼓舞人心的用例&#xff0c;多家公司现在正在探索如何利用该技术实现业务增长。无论实施何种其他技术&#xff0c;基于物联网的新设备正迅速成为一项重…

TCP传输层协议(4)

TCP应用层协议&#xff08;4&#xff09; 流量控制 接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应. 因此 TCP 支持根据接收端的处理能力, 来决定发送端的发送速…

双向SSL认证之Apache实战配置

防御未授权访问&#xff0c;为企业级应用构筑双重身份验证防线 本文是关于Apache配置双向SSL认证的深度技术指南&#xff0c;包含全流程操作、调试技巧及企业级解决方案&#xff0c;适用于运维工程师和安全管理员。 1.为什么需要双向认证 &#xff1f; 核心价值 &#x1f51…

JavaScript 实用工具方法小全

1. 精确获取小数位数/*** 获取数字的小数位数&#xff08;支持科学计数法&#xff09;* param {number|string} num - 要检查的数字&#xff0c;可以是数字或字符串形式* returns {number} 返回小数部分的位数* * 实现原理&#xff1a;* 1. 处理科学计数法&#xff08;如1.23e-…

【易错题】C语言

今日遇到的易错题 #include <stdio.h> int i;//全局变量默认初始化是0 int main() {i--;//-1if (i > sizeof(i)){printf(">\n");}else{printf("<\n");}return 0; }易错点&#xff1a;sizeof的返回值类型实际为无符号整形&#xff0c;因此编…

第七十五章:AI的“思维操控师”:Prompt变动对潜在空间(Latent Space)的影响可视化——看懂AI的“微言大义”!

Prompt变动对潜在空间影响前言&#xff1a;AI的“思维操控师”——Prompt变动对潜在空间的影响可视化&#xff01;第一章&#xff1a;痛点直击——Prompt“难伺候”&#xff1f;改一个字就“面目全非”&#xff01;第二章&#xff1a;AI的“思维圣地”&#xff1a;潜在空间&…