Waitpid 函数|学习笔记

简介: 快速学习 Waitpid 函数,“Waitpid 函数”,也是“等”。虽然功能和 “Wait” 相同,但是 “Waitpid” 实现的功能比 “Wait” 实现的功能更多。

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频Waitpid 函数】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/10990


Waitpid 函数

 

内容介绍:

一·功能

二·参数 “pid”

三·参数 “options”

四·返回值


一、功能

比如我们的父进程创建了三个子进程,我们通过 “Wait” 去等,是不能确定等谁的。

但 “Waitpid” 就能精准的等某一个子进程。 “Waitpid” 的返回值肯定成功的话(就是子进程的进程号),失败就是负数的, “Waitpid” 第一个参数是指定你等哪一个子进程。

如果有多个子进程的话,什么子进程的进程号是不是等谁?第二个参数和它是一致的,要保存就定义变量取离值,不想保存子进程就退出状态。

我们最后看第三个参数,一般船龄带阻塞的,

看 “Waitpid” 的功能:“等待子进程终止,如果子进程终止了,在此函数会回收子进程的资源。”

所以说wait的功能第一个是等,第二个是回收子进程的资源,只不过它可以指定等待哪个子进程。然后返回值成功返回子进程的 ID ,见证号码出错返回-1,这个是和 “Wait” 一致的。

 

二、参数 “pid” :

然后注意 “pid” ,正常情况下,我们传用的最多的就是传子进程的进程号是不是大于零的那种情况,如果我们传零进去的话,等的时候,第一个参数传的零,那肯定不是等零号进程,等待同一个进程组当中的任何子进程,那它也是自己的子进程。

如果子进程加入了别的进程组 “Waitpid” 就不会等它了。比如说你传零的话,某一个父进程有三个子进程,其中A进程加入到别的进程组,这个组只剩下B和C二个进程,那你第一个参数如果传零的话,它是等BC?等BB或者C?知道没有a它就不等了,然后等待同一个进程组当中的任何子进程,它相当于没有指定某一个,只是指的和我一个进程组当中的子进程。

如果第一个参数传-1的话,它等待任意子进程,它的功能就和 “wait” 的作用一样。

就指定等任何一个子进程, “Wait” 就没有指定等哪个子进程,如果传一个负数的话,比如你传-100这个参数,那肯定不是等进程号的那个进程,因为进程号都是大于1的,你传一个负100的话,它等待的是指定进程组当中的任何子进程,这个进程组的ID等于 “pid” 的绝对值,是等进程组号为100,而且还是等它自己的子进程。用的最多的就是直接传子进程的进程号。

 

三、参数 “options” :

那最后一个参数 “options” ,第三个参数用的最多的就是传零,就是阻塞父进程,调位 “pid” 时是不带阻塞的,只要子进程不结束,它就一直等,还可以第三个参数可以传 “WNOHANG” 。

如果 “Waitpid” 的第三个参数 “options” 传这个的话,没有任何子进程已经结束,它就立即返回,相当于有子进程已经结束了,直接回收资源往下进行,如果没有子进程结束的话,直接出错往下进行。如果传  “WUNTRACED” 的话,子进程暂停了,则此函数立马返回,并且不理会子进程的结束状态。

子进程其实有种状态叫暂停,经常用于跟踪调试,很少用到。所以说最多的是用的是0。

就停在那等,等到了回收资源,如果不等,这回收资源的话,就用

“WNOHANG” 。

 

四、返回值:

返回值成功返回子进程的进程号,然后出错返回-1,注意:如果设置 “WNOHANG” 的话,并且 “pid” 指定的子进程存在则返回0。

代码,我们可以改一下,第一个参数是在父进程当中 “pid” 的值是子进程的进程号,第二个参数是状态,第三个参数是0,停在这。

5秒钟直接结束,父进程是也拿到子进程的返回值。也打印子进程的进程号。

注意一下,那它可以指定等哪个子进程,子进程的退出状态稍改就可以,这是用的最多的情况。

传子进程的进程号传0就是阻塞,如果不想让它阻塞,进程已经结束了就回收;没结束返回它继续往下进行。

image.gif这是为了 “pid” 的好处,就可以指定进程号等哪一个子进程。

相关文章
|
Java 关系型数据库 MySQL
解决SpringBoot配置文件项目重启出现乱码的情况
解决SpringBoot配置文件项目重启出现乱码的情况
365 0
|
机器学习/深度学习
信道编码译码及MATLAB仿真(三)
信道编码译码及MATLAB仿真
717 3
|
算法 Linux API
【Linux系统编程】Linux下删除文件的 API方式以及文件删除机制差异
【Linux系统编程】Linux下删除文件的 API方式以及文件删除机制差异
469 0
|
存储 算法 安全
【算法】Java实现ECC算法
ECC(Elliptic Curve Cryptography)是一种非对称加密算法,基于椭圆曲线数学。与传统的RSA和DSA等算法相比,ECC在相同的安全性下使用更短的密钥长度,提供了更高的加密效率和性能。
1183 0
|
机器学习/深度学习 算法 TensorFlow
「隐语小课」深度学习下的DP-SGD
「隐语小课」深度学习下的DP-SGD
1375 0
|
9月前
|
人工智能 资源调度 自然语言处理
钉钉项目 Teambition AI 能力重塑项目管理100种可能!
钉钉项目Teambition AI迎来重磅升级,通义千问与DeepSeek两大模型助力AI项目管理。从项目规划、任务创建到执行建议、字段管理,再到周报总结和数据分析,Teambition AI贯穿项目全流程,重塑项目管理100种可能。AI技术赋能项目管理智能化,提升团队协作效率,确保项目进度精准把控,让任务分配、资源调度和风险管理更加轻松高效。
钉钉项目 Teambition AI 能力重塑项目管理100种可能!
|
监控 网络协议 Nacos
Nacos:构建微服务架构的基石
Nacos:构建微服务架构的基石
550 2
|
5月前
|
机器学习/深度学习 人工智能 机器人
面向人机协作任务的具身智能系统感知-决策-执行链条建模
本文探讨了面向人机协作任务的具身智能系统建模,涵盖感知、决策与执行链条。具身智能强调智能体通过“身体”与环境互动,实现学习与适应,推动机器人技术升级。文章分析了其关键组成(感知、控制与决策系统)、挑战(高维状态空间、模拟鸿沟等)及机遇(仿真训练加速、多模态感知融合等)。通过代码示例展示了基于PyBullet的强化学习训练框架,并展望了通用具身智能的未来,包括多任务泛化、跨模态理解及Sim2Real迁移技术,为智能制造、家庭服务等领域提供新可能。
面向人机协作任务的具身智能系统感知-决策-执行链条建模
|
并行计算 Java API
|
机器学习/深度学习 人工智能 测试技术
DeepSeek新作Janus:解耦视觉编码,引领多模态理解与生成统一新范式
DeepSeek-AI团队提出的Janus框架,通过解耦视觉编码,实现了多模态理解与生成的统一。该框架在多模态理解和生成任务上均表现出色,尤其在MMBench、SEED-Bench等多个基准测试中取得领先结果。Janus的设计提高了任务灵活性和可扩展性,但也面临计算成本和训练数据需求的挑战。
421 8