进程(2) wait、exec函数族

news2025/2/6 0:55:39

目录

1. fork() 函数

功能

使用时注意事项

2. exit() 函数

功能

使用时注意事项

3. wait() 函数

功能

使用时注意事项

总结

wait()

异常信号结束

waitpid

exec函数族

execl()

execlp()

execv

execvp


fork()exit() 和 wait() 函数在进程管理中扮演着重要的角色,它们之间的关系密切,了解它们的行为和使用方法对于编写可靠的多进程程序非常重要。下面是它们的基本功能、关系以及使用时需要注意的事项:

1. fork() 函数

功能
  • fork() 用于创建一个新的子进程。调用 fork() 后,父进程和子进程都会继续执行 fork() 之后的代码。
  • 在子进程中,fork() 返回 0,而在父进程中,fork() 返回子进程的 PID。
使用时注意事项
  • 错误处理fork() 如果失败,会返回 -1。要检查并处理这个错误。
  • 资源管理:子进程会复制父进程的内存空间,虽然这是高效的(写时拷贝),但要注意资源的合理分配和释放。
  • 进程隔离:子进程和父进程是相互独立的,它们可以有不同的执行路径和数据。

2. exit() 函数

功能
  • exit() 用于终止当前进程的执行,并返回一个状态码。状态码通过 exit() 函数的参数传递给操作系统。
  • 子进程调用 exit() 后会立即终止,其资源会被操作系统回收,且其退出状态会传递给父进程。
使用时注意事项
  • 退出状态:状态码可以通过 WEXITSTATUS(status) 从 wait() 或 waitpid() 获取,用于检查子进程的退出情况。
  • 清理资源:在调用 exit() 之前,确保所有打开的文件描述符和动态分配的内存得到妥善处理,以避免资源泄漏。

3. wait() 函数

功能
  • wait() 用于使父进程等待一个或多个子进程结束。它会阻塞,直到一个子进程终止,并获取子进程的终止状态。
  • waitpid() 是 wait() 的一个变体,允许更精细的控制,指定等待特定的子进程或使用非阻塞模式。
使用时注意事项
  • 避免僵尸进程:如果父进程不调用 wait() 或 waitpid(),子进程终止后会成为僵尸进程,直到父进程处理它们。调用 wait() 可以避免僵尸进程。
  • 多子进程管理:在处理多个子进程时,建议使用 waitpid() 以控制等待特定子进程的退出。
  • 处理子进程状态wait() 和 waitpid() 返回的状态信息可以通过 WIFEXITED(status) 和 WEXITSTATUS(status) 进行检查,以判断子进程是否正常退出及其退出状态。

总结

  • 创建子进程:使用 fork() 创建子进程。子进程会从 fork() 返回处开始执行,父进程也会继续执行。
  • 终止进程:子进程使用 exit() 终止自己,并返回状态码给操作系统。父进程可以通过 wait() 或 waitpid() 等待子进程结束,并获取其退出状态。
  • 资源回收:正确使用 wait() 或 waitpid() 避免僵尸进程,确保系统资源得到有效管理。

通过正确使用这些函数,可以实现有效的进程管理,确保多进程程序的稳定性和可靠性。

wait()

父进程使用wait后会等待子进程消亡后再跳转到wait位置开始回收后执行父后面程序。

异常信号结束

waitpid

一直循环扫描检测,直至程序正常结束。

练习

exec函数族

execl()

会搜索当前目录

execlp()

默认路径搜索系统路径,如果是系统命令(cat、ls 等)第一个可以输入”cat“就行,这就是与execl的区别,自己的可执行程序需要完整路径。

execv

会搜索当前路径,execv和execvp区别是函数第一个参数,路径直接写入和传入args[0]

execvp

只会搜索系统路径path

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

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

相关文章

【C语言】【Linux】如何在Linux终端中进行彩色输出——C语言篇

🐚作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)🐳博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd🌐系列专栏:C语言编程&…

双亲委派机制的优势与劣势

三次双亲委派机制的破坏

24 优化算法

目录 优化和深度学习深度学习中的挑战局部最小 vs 全局最小鞍点(saddle point)梯度消失小结凸性(convexity)凸集凸函数(convex function)凸函数优化凸和非凸例子小结梯度下降(gradient descent)1、梯度下降算法是最简单的迭代求解算法2、学习率(learning rate)小结随…

Unity小功能 - 贴墙滑行

目录 一. 简介 二. 创建项目 1.新建地板 2.创建墙体 3.创建主角 三. 编写代码 四. 效果演示 五. 总结 一. 简介 贴墙滑行是在游戏中常见的一种角色动作表现,它能够增加游戏的真实感和趣味性,同时也为游戏玩法带来更多的可能性。 在 Unity 中实…

【秋招笔试】8.18大疆秋招(第三套)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

测绘程序设计|测绘程序设计大赛介绍|备赛建议

**由于微信公众号改变了推送规则,为了每次新的推送可以在第一时间出现在您的订阅列表中,记得将本公众号设为星标或置顶喔~** 简单介绍测绘学科创新创业智能大赛测绘技能竞赛——测绘程序设计比赛。 🌿前言 测绘程序设计比赛是测绘学科创新创…

HTTPS协议和HTTP协议的区别详细图解

文章目录 HTTPS协议加密是什么?对称加密非对称加密 Cookie 和 Session的区别 HTTPS协议 HTTP协议内容都是按照文本的方式明文传输的,是没有经过加密的,没有加密就意味着裸奔,所以协议中的内容就很容易引起一些不良人士的获取和篡…

STM32自制手持小风扇实验

1.1 介绍: 实验功能说明:功能(1)按一下按键小风扇开启,再按一下关闭。 功能(2)按一下按键小风扇一档风速,再按一下二挡,依次三挡…关闭。 按键模块说明:按下…

CommandLineRunner

CommandLineRunner 是 Spring Boot 中的一个接口,它允许你在 Spring 应用程序启动之后(即在 SpringApplication.run() 执行完成后)立即执行一些代码。这在你需要初始化数据、检查配置文件参数或执行其他启动任务时非常有用。 实现 CommandLin…

win10蓝屏CRITICAL_PROCESS_DIED

目录 前言 处理过程 第一阶段处理:重置虚拟内存 第二阶段处理:sfc /scannow 扫描系统并修复损坏文件 前言 连续一周开机一段时间后蓝屏,刚开始的蓝屏提示的是KERNEL_DATA_INPAGE_ERROR,后来经过一番操作,依然出现…

vue使用axios请求后端数据

前后端分离项目的基础: 前后端跨域访问 vite.config.js中加入 // 1.为什么要跨域 //因为浏览器的同源策略,不同站点之间访问需要跨域 //实现跨域的方式:server: {proxy: {// 假设要跨域访问的后端 API 地址以 /api 开头/api: { //表示拦截以/api开头的…

牛客算法小题

目录 牛客.求和​编辑 牛客.abb 牛客.合并k个有序链表 牛客.滑雪(暴力->递归->记忆化搜索) 牛客.旋转字符串 牛客.求和 我没想到是dfs,另外我的dfs能力确实也不强,另外难度大的是他的那个输出 import java.util.Scanne…

医用氧检测标准:医用氧用什么检怎么检都做了明确规定

新规在《中国药典》2020 年版二部 XGB2021-061条于2022年5月22日实施。 医用氧技术指标&#xff1a;氧≥99.5% 、一氧化碳<0.0005、二氧化碳&#xff1c;0.03%、水分含量&#xff1c;0.0067%&#xff09; 一氧化碳对人体有害&#xff0c;过量的二氧化碳也会影响人的呼吸&a…

2024.8.20 作业

目录 思维导图&#xff1a; 面试题练习&#xff1a; 1、C语言中指针数组和数组指针的区别 2、结构体字节对齐的原理 3、TCP和UDP的区别 4、同步通信和异步通信的区别 5、多线程的理解 6、大小端验证 7、互斥锁 8、共享内存特点 9、C语言的指针 10、gcc编译 11、socket套接字 1…

探索顶级PDF水印API:PDFBlocks(2024年更新)

引言 在一个敏感信息常常面临风险的时代&#xff0c;能够轻松高效地保护文档的能力至关重要。PDF水印已成为企业和个人寻求保护其知识产权、确保文件保密性的基本工具。 PDFBlocks 文字水印 API是什么&#xff1f; PDFBlocks API 提供了一个强大的解决方案&#xff0c;用于在…

轮询系统寻客户

寻找收单客户&#xff0c;不管是源头老板&#xff0c;还是二手中介&#xff0c;不管是PayPal&#xff0c;条纹&#xff0c;还是其他信用卡或轮询系统&#xff0c;只要能收单&#xff0c;都可以免费加入我们。 ​在寻卖单客户&#xff0c;不管是源头订单还是跳转订单&#xff0c…

Redis篇一:初识Redis

文章目录 前言1. 初始Redis2. MySQL VS Redis3. 什么是分布式系统&#xff08;也是一种处理大量数据时的处理方式&#xff09;3.1 单机架构3.2 数据库与应用服务分离3.3 负载均衡3.4 数据库读写分离3.5 引入缓存&#xff08;Redis&#xff09;3.6 数据库分库分表3.7 引入微服务…

如何使用Web Scraper爬虫抓取数据?

Web Scraper是一个基于Chrome/火狐浏览器的插件&#xff0c;能够在网页上自动爬取数据&#xff0c;提供了丰富的配置&#xff0c;支持自动翻页、登录认证、JavaScript渲染等等&#xff0c;可以解决多数爬虫难题。 Web Scraper的安装也很简单&#xff0c;在Chrome应用商店里搜索…

【每日刷题】Day104

【每日刷题】Day104 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 2. 1004. 最大连续1的个数 III…

RabbitMQ环境搭建

2.5.RabbitMQ 安装 a.docker方式安装&#xff1a; 1.在我的docker学习笔记中具有详细的安装过程 b.rpm包方式安装&#xff1a; 1.MQ下载地址2.这里是提前下载好后上传安装包到服务器得opt目录下&#xff1a; 3.安装MQ需要先有Erlang语言环境&#xff0c;安装文件的Linux命令…