【Linux】wait()和waitpid()函数

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥Linux系列专栏:Linux基础 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述


目录

  • 一、僵尸进程
  • 二、wait()函数
  • 三、waitpid()函数
  • waitpid()相比于wait()的优点

一、僵尸进程

在Linux或Unix系统中,子进程只能由父进程进行回收。
如果进程结束但是进程资源仍未被回收,这个进程将会变为僵尸进程,会导致内存泄漏和系统性能下降。

使用getchar() 阻塞父进程的执行,子进程结束后父进程未对其进行回收:

#include <stdio.h>
#include <unistd.h>
int main()
{printf("11111111\n");pid_t pid;pid = fork();if(pid > 0){//Fatherprintf("Father pid:%d \n",getpid());getchar();}else if(pid == 0){//Childprintf("Child pid:%d,Father pid:%d\n",getpid(),getppid());}else{perror("processs fail\n");}printf("22222\n");return 0;
}

image.png
使用ps aux命令查看进程:

image.png

其中Z+符号代表了这是一个僵尸进程

二、wait()函数

使用wait()函数可以用于回收一个僵尸进程

pid_t wait(int* status)	//参数为传出参数,用于获取退出原因/状态,可以传NULL

wait()函数返回值

  • 回收成功,返回僵尸进程的pid
  • 回收失败,返回-1

wait()函数是阻塞函数,如果进程未结束,wait()函数将会阻塞等待进程结束后再执行
父进程调用wait()后,僵尸进程(子进程)执行完被回收:

image.png
但是当子进程的代码未执行完时,父进程中的wait()函数将会一直阻塞,下面介绍一个非阻塞的主动回收僵尸进程的函数:

三、waitpid()函数

使用waitpid()函数可以用于回收一个僵尸进程(非阻塞)

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

函数的返回值:

  • 回收成功,返回僵尸进程的pid
  • 回收失败,返回-1
  • 子进程未结束,非阻塞返回0

pid_t pid:

  • 回收所有的子进程:pid = -1
  • 回收指定的进程:pid = 要回收进程的pid
  • 回收同一组的进程:pid = 0
  • 回收另一个组的进程:将组id传给pid参数,pid < -1

options:

  • 非阻塞立即返回:WNOHANG
  • 阻塞(与wait()函数相同):0

waitpid()相比于wait()的优点

  • 更灵活:waitpid()提供了更多的选项和参数,可以更灵活地控制等待子进程的行为
  • 非阻塞:waitpid()可以实现非阻塞的等待,这样父进程就不会被阻塞,可以继续执行其他任务

在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

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

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

相关文章

CRG设计之复位

1. 前言 CRG(Clock and Reset Generation&#xff0c;时钟复位生成模块) 模块扮演着关键角色。这个模块负责为整个系统提供稳定可靠的时钟信号&#xff0c;同时在系统上电或出现故障时生成复位信号&#xff0c;确保各个模块按预期运行。简而言之&#xff0c;CRG模块就像是SoC系…

代码随想录算法训练营第六天 - 哈希表part01

哈希表 笔记&#xff1a; 哈希表能解决什么问题呢&#xff0c;一般哈希表都是用来快速判断一个元素是否出现集合里。当我们遇到了要快速判断一个元素是否出现集合里的时候&#xff0c;就要考虑哈希法。 但是哈希法也是牺牲了空间换取了时间&#xff0c;因为我们要使用额外的数…

网工每日一练(1月30日)

试题1 以太网中的帧属于 &#xff08;B&#xff09; 协议数据单元。 A、物理层 B、数据链路层 C、网络层 D、应用层 试题2 在Linux 系统中&#xff0c;采用 &#xff08;B&#xff09; 命令查看进程输出的信息&#xff0c;得到下图所示的结果。系统启动时最先运行的进程是 &…

黑盒测试用例的具体设计方法(7种)

7种常见的黑盒测设用例设计方法&#xff0c;分别是等价类、边界值、错误猜测法、场景设计法、因果图、判定表、正交排列。 &#xff08;一&#xff09;等价类 1.概念 依据需求将输入&#xff08;特殊情况下会考虑输出&#xff09;划分为若干个等价类&#xff0c;从等价类中选…

项目交付后,PM该如何做复盘总结?

2023已经收尾&#xff0c;那些让我们或焦灼、或紧急、或喜悦、或悲伤的项目也都交付完毕了。为了更好的总结工作成果与反思&#xff0c;各家单位开始一边排练年会舞蹈一边要求员工做出项目交付后复盘方案了&#xff0c;那么&#xff0c;怎样的复盘才会让项目工作更加明确&#…

涂鸦小程序事件系统——小程序间通信

背景信息 一些内聚的、特定的功能模块&#xff0c;可能会被拆分成多个小程序&#xff0c;这些小程序之间需要进行通信、协作&#xff0c;完成数据的传递、状态的同步等。 基础库版本 ≥ 2.9.0 打开其他小程序 小程序可以通过 ty.navigateToMiniProgram 接口打开其他小程序&am…

每日OJ题_算法_前缀和④_力扣238. 除自身以外数组的乘积

目录 力扣238. 除自身以外数组的乘积 解析代码 力扣238. 除自身以外数组的乘积 238. 除自身以外数组的乘积 难度 中等 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数…

1. HarmonyOS 应用开发 TS 准备-1

1. HarmonyOS 应用开发 TS 准备-1 一、TypeScript 是什么 TypeScript 是一种由微软开发的自由和开源的编程语言。 它是 JavaScript 的一个超集&#xff0c;而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。 TypeScript 提供最新的和不断发展的 JavaScript…

美易官方《盘前:道指期货跌0.04% 风险周降临》

盘前&#xff1a;道指期货跌0.04% 风险周降临 随着市场的波动&#xff0c;道指期货在盘前微幅下跌0.04%&#xff0c;投资者们正在迎接一个重要的风险周。这个风险周可能会对市场产生重大影响&#xff0c;因此投资者们需要密切关注。美股股指期货周一盘前涨跌互现&#xff0c;本…

如何在群晖NAS部署office服务实现多人远程协同办公编辑文档

文章目录 本教程解决的问题是&#xff1a;1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 本教程解决的问题是&#xff1a; 1.Word&#xff0c;PPT&#xff0c;Excel等重要文件存在本地环境&#xff0c;如何在编…

35.【TypeScript 教程】编译选项

TypeScript 编译选项 TypeScript 提供了很多不同功能的编译选项&#xff0c;既可以通过配置 tsconfig.json 文件中的 compilerOptions 属性来实现编译&#xff0c;也可以使用在 tsc 命令后跟随参数这形式&#xff0c;直接编译 .ts 文件。 注意&#xff1a; 当命令行上指定了输…

Web3技术革新:重新定义在线体验

互联网的不断演进塑造了我们的数字生活&#xff0c;而Web3技术的涌现正带来一场前所未有的变革。本文将深入探讨Web3技术的创新&#xff0c;以及它如何重新定义和提升我们的在线体验。 Web3技术的基本概念 Web3是互联网的第三个时代&#xff0c;它将去中心化、区块链、智能合约…

解决import Jetson.GPIO报错“权限错误”

在导入Jetson.GPIO模块时出现权限错误&#xff0c;可能是由于缺少适当的权限或设备权限问题。以下是一些建议&#xff1a; 使用sudo&#xff1a; 尝试使用sudo来运行你的Python脚本或解释器&#xff0c;以获取足够的权限&#xff1a; sudo python your_script.py请注意&#xf…

(一)PySpark3:安装教程及RDD编程(非常详细)

目录 一、pyspark介绍 二、PySpark安装 三、RDD编程 1、创建RDD 2、常用Action操作 ①collect ②take ③takeSample ④first ⑤count ⑥reduce ⑦foreach ⑧countByKey ⑨saveAsTextFile 3、常用Transformation操作 ①map ②filter ③flatMap ④sample ⑤d…

【Linux】—— 信号的产生

本期&#xff0c;我们今天要将的是信号的第二个知识&#xff0c;即信号的产生。 目录 &#xff08;一&#xff09;通过终端按键产生信号 &#xff08;二&#xff09;调用系统函数向进程发信号 &#xff08;三&#xff09;由软件条件产生信号 &#xff08;四&#xff09;硬件…

会计分录的概念和应用

目录 一. 会计分录的概念二. 会计分录的分类三. 会计分录的应用 \quad 一. 会计分录的概念 \quad 会计分录是指对每笔经济业务列示其应借记和应贷记账户及其金额的一种记录。 会计分录的基本要素 ( 1 )账户及其所属明细账户名称(或会计科目及其所属明细科目名称) (2 )记账方向…

Linux系统——正则表达式

有一段时间本机访问量过高&#xff0c;如何查看日志提取出访问量前十的信息 1.使用提取命令&#xff08;cut、awk、sed&#xff09;提取出ip地址的那一列 2.使用sort按数字排序&#xff0c;将相同的地址整合到一起 3.使用uniq -c统计出数量 4.使用sort 数字 数字倒序排序 5.最…

nginx的编译安装

nginx 的编译安装 1. 准备 下载地址&#xff1a;https://nginx.org/en/download.html linux服务器环境 2. 安装 2.1 解压并进入源码目录 tar -zxvf nginx-1.24.0.tar.gz cd nginx-1.24.0.tar.gz 2.2 安装 nginx编译时所需的依赖库 yum -y install gcc pcre pcre-devel zli…

MySQL二月进阶学习计划

CSDN的各位读者&#xff0c;大家好。马上过年了&#xff0c;最近工作不是很忙&#xff0c;所以有很多时间用来学习。 过去的一周我也学习了一部分内容&#xff0c;但是像无头苍蝇一样没有规划。 我计划用整个2月的时间&#xff0c;再好好学习一遍MySQL数据库相关的知识。下面是…

【大数据】Flink SQL 语法篇(一):CREATE

Flink SQL 语法篇&#xff08;一&#xff09; 1.建表语句2.表中的列2.1 常规列&#xff08;物理列&#xff09;2.2 元数据列2.3 计算列 3.定义 Watermark4.Create Table With 子句5.Create Table Like 子句 CREATE 语句用于向当前或指定的 Catalog 中注册库、表、视图或函数。注…