Linux详解:进程等待

news2024/12/23 13:35:15

文章目录

  • 进程等待
    • 等待的必要性
    • 进程等待的方法
      • wait
      • waitpid
      • 获取子进程status
      • 阻塞等待 与 非阻塞等待

进程等待

等待的必要性

  • 子进程退出,父进程不进行回收的话,就可能造成僵尸进程,进而造成内存泄露

  • 如果进程进入了僵尸状态,kill也杀不掉这个进程。因为谁也杀不死一个已经死去的进程

  • 父进程派给子进程的任务完成的如何,使用者应该直到结果。子进程的任务是完成了还是未完成。

  • 父进程通过进程等待(wait)的方式,回收子进程的资源,获取子进程的退出信息

  • 父进程通过wait的方式,回收子进程的资源

    子进程的退出信息,保存在子进程的pcb中。

进程等待的方法

#include<sys/types.h>
#incldue<sys/wait.h>
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);

wait

pid_t wait(int *status);
  • 默认进行阻塞等待,子进程没有退出,父进程就一直等待。
  • 等待父进程的任意一个子进程退出。
  • 返回值:
    • >0:等待成功,返回值是等待子进程的pid
    • <0:等待失败
  • 参数:输出型参数,获取子进程的退出状态,如果不关心则可以设置为NULL

frok之后,父子进程谁先运行,不确定,是由操作系统的调度器运行。但是谁最后退出是确定的,父进程一定要最后退出,因为要等待子进程运行结束之后回收子进程。

waitpid

pid_t waitpid(pid_t pid, int *status, int options);
  • 返回值:
    • >0:等待成功,返回值是等待子进程的pid
    • <0:等待失败
  • 参数
    • pid
      • pid=-1,等待人一个子进程,与wait等效
      • pid>0,等待其进程id与pid值相等的子进程
    • status:输出型参数,获取子进程的退出状态,如果不关心则可以设置为NULL
    • options:0、非阻塞

获取子进程status

  • wait和waitpid,都有一个status参数,这个参数是一个输出型参数,由操作系统进行填充
  • 如果传递NULL,表示不关心子进程的退出状态信息
  • 如果不是NULL,则操作系统会根据该参数,将子进程的退出信息反馈给父进程
  • status不能简单的当作整形来看待,应该当成位图来看,只考虑status的低16位。
status:0000 0000 0000 0000 0000 0000 0000 0000

信号编号进程退出码表示状态
00没有异常,结果正确
!00出现异常,退出码无意义
0!0没有异常,结果错误
!0!0出现异常,退出码无意义
0~7,进程出现异常,收到的信号编号
9~15,进程正常结束的退出码

信号编号:status&0x7F
退出码:(status >> 8)& 0xFF

status:

  • WIFEXITED(status):若为正常终止子进程返回的状态,则为真。(查看进程是否正常退出)。判定当前进程的退出信号是否为0,为0就为真,不为0就是假。
  • WEXITSTATUS(status):若WIFEXITED非零,提取子进程退出码。(查看进程的退出码)。

因为进程具有独立性,所以父子无法直接互相修改对方的数据之后,让对方看到。

因为读取子进程退出信息,本质上是读取内核数据,所以需要调用系统接口。

#include<sys/types.h>
#incldue<unistd.h>
#include<sys/wait.h>
int main()
{
	pid_t id = fork();
	if(id == 0)
	{
		int cnt = 5;
		while(cnt)
		{
			printf("child is running, pid:%d, ppid:%d",getpid(),getppid());
			sleep(1);
			cnt--;
		}
		exit(0);
	}
	int status = 0;
	pid_t rid = waitpid(id,&status,0);
	if(id>0)
	{
		printf("wait success,rid:%d , status:%d, exitsigno:%d, exitcode    :%d\n",rid,status,(status&0x7F),((status>>8)&0xFF));
	}
}

阻塞等待 与 非阻塞等待

父进程阻塞等待,当子进程还在执行时,没有返回,父进程会将自己设置为阻塞状态,一直等待着子进程结束回收。

非阻塞等待,父进程检查子进程是否返回,如果子进程没有返回,不进行等待,父进程立刻返回,返回值为0。如果子进程已经返回,则返回子进程的id。

WNOHANG:若pid指定的子进程没有结束,则waitpid()函数返回0,不予等待,若正常结束,则返回该子进程的id。

单次调用:非阻塞

基于非阻塞的轮询访问

机器宕机了,操作系统没有反应 – hang住了

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

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

相关文章

宝塔面板安装教程(linux)

宝塔官网地址 宝塔官网linux安装地址 针对Ubuntu系统的安装命令&#xff1a; wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh ed8484bec 安装过程中&#xff0c;中途会出现一个 Y&N ? 的选项&#xf…

李沐62_序列到序列学习seq2seq——自学笔记

"英&#xff0d;法”数据集来训练这个机器翻译模型。 !pip install --upgrade d2l0.17.5 #d2l需要更新import collections import math import torch from torch import nn from d2l import torch as d2l循环神经网络编码器。 我们使用了嵌入层&#xff08;embedding l…

【笔记1】从零开始做一个男头的流程(超级详细)

目录 大体 眼窝 鼻子 脖子 耳朵 嘴巴1 颧骨 嘴巴2 眼睛 头 开始细化 大体 眼窝 嘴巴 鼻子 大体 注意&#xff01;&#xff01;先整体后局部&#xff0c;一开始不要加太多的线&#xff0c;尽量先用最少的线调整出一个大体的结构。 1.准备好参考图&#xff0c;在…

2024年的Java版本选择?java 17 安装

文章目录 2024年的Java版本选择&#xff1f;java 1.8 和 java17 什么区别&#xff1f;java 17 安装windows 11安装java 17C:\Program Files\Common Files\Oracle\Java\javapath是什么 2024年的Java版本选择&#xff1f; 3年前&#xff0c;java 1.8是市场主流&#xff08;还有一…

Acrobat Pro DC 2023:专业PDF编辑软件,引领高效办公新时代

Acrobat Pro DC 2023是一款专为Mac和Windows用户设计的专业PDF编辑软件&#xff0c;凭借其强大的功能和卓越的性能&#xff0c;成为现代职场人士不可或缺的得力助手。 这款软件拥有出色的PDF编辑能力。用户不仅可以轻松地对PDF文档中的文字、图片和布局进行编辑和调整&#xf…

PyAudio安装!!解决使用pip install PyAudio安装报错问题

如果使用pip install PyAudio安装报错 一般建议选择本地安装 但是本人也是从网上找了很多资料&#xff0c;发现本地的wheel的网址打开没有文件了 然后我就用了这个方法&#xff0c;对于我的电脑是非常有效果的&#xff01;&#xff01; 如果指令装不上的话 PyAudio PyPI …

linux中git的使用

为什么要有git git相当于一个仓库可以让我们更好的去管理我们的代码&#xff0c;实现版本的控制&#xff0c;上传到云端仓库。有了git,就可以实现多人同时开发一个项目&#xff08;每个负责一部分代码&#xff0c;最后都上传到同一个仓库&#xff09;。 git github/gitee 的区…

Burp 指纹识别+OA弱口令爆破-BurpFingerPrint

简介 攻击过程中&#xff0c;我们通常会用浏览器访问一些资产&#xff0c;该BurpSuite插件实现被动指纹识别网站提取链接OA爆破&#xff0c;可帮助我们发现更多资产。 功能如下 下述功能会在2024年5月底完成&#xff0c;如果有更好的建议都可以提&#xff0c;然后再麻烦点个…

linux磁盘原理

在linux系统中&#xff0c;对磁盘进行管理与windows系统类似&#xff0c;都要先分区&#xff0c;格式化&#xff0c;创建文件系统&#xff0c;挂载目录&#xff0c;数据写入

【Unity动画系统】Animator组件的属性

介绍Animator组件的全部属性 Controller&#xff1a;动画控制器 Avatar&#xff1a;人物骨骼 Apply Root Motion&#xff1a;有一些动画片段自带位移&#xff0c;如果希望自带的位移应用在游戏对象上&#xff0c;那么就勾选&#xff1b;如果自己编写脚本&#xff0c;那么就不…

Milvus Cloud 向量数据库Reranker成本比较和使用场景

成本比较:向量检索 v.s. Cross-encoder Reranker v.s. 大模型生成 虽然 Reranker 的使用成本远高于单纯使用向量检索的成本,但它仍然比使用 LLM 为同等数量文档生成答案的成本要低。在 RAG 架构中,Reranker 可以筛选向量搜索的初步结果,丢弃掉与查询相关性低的文档,从而有…

使用webpack给大屏自适应插件autofit.js增加umd打包方式

最近有个大屏自适应的需求&#xff0c;而且想直接通过script标签来引入自适应的插件js&#xff0c;搜索相中了autofit.js&#xff0c;可惜不支持umd格式的引入&#xff0c;虽然也能直接copy源码&#xff0c;但是还是折腾下给它打包成umd格式的代码。 fork源码&#xff0c;克隆…

第10章 项目管理基础知识

一、项目概述 &#xff08;一&#xff09;项目 在既定的项目资源要求和约束下&#xff0c;为实现特定目标而相互联系的一次性活动&#xff08;资源任务&#xff09;。世界上没有两个完全相同的项目项目有资源约束&#xff0c;一定的目的&#xff0c;是一次性。 &#xff08;…

面试官:Docker和传统虚拟机有什么区别?

我有一个程序员朋友&#xff0c;他每年情人节都要送女朋友一台服务器。 他说&#xff1a;“谁不想在过节当天收到一台 4核8g 的服务器呢&#xff1f;” “万一对方不要&#xff0c;我还能留着自己用。” 给他一次过节的机会&#xff0c;他能把浪漫玩的明明白白。 所以今年情人…

APP上架APP Store因为苹果登录被拒,该如何解决

之前有一段时间 &#xff0c;我们的APP因为苹果登录被拒了几次。分享出来&#xff0c;希望对大家有所帮助。 主要有两种被拒理由&#xff1a; 没有登录/苹果登录。登录按钮设计不符合标准。 这其实是很小的一件事情。但是就是这么小的事情&#xff0c;我们在这上面栽了几次跟…

【算法学习】day2

文章目录 BFS1.图像渲染2.岛屿数量 BFS 1.图像渲染 思路&#xff1a;BFS宽度遍历&#xff0c;我们需要对初始像素进行一层一层遍历&#xff0c;也就是上下左右四个方向进行遍历判断&#xff0c;如何访问这四个方向呢&#xff0c;就需要利用两个数组dx和dy来进行判断和遍历&…

uniapp关于iconfont字体图标使用

1、打开[阿里巴巴矢量图标库](https://www.iconfont.cn/)&#xff0c;选择需要的图标添加到购物车 2、点开购物车&#xff0c;将图标添加到项目 3、点开项目&#xff0c;点击下载至本地&#xff0c;会得到一个download.zip包 4、解压download包 5、将包里的iconfont.css和iconf…

d16(149-153)-勇敢开始Java,咖啡拯救人生

跳过了p151 四小时的讲题我不敢听&#xff1a;) Stream Stream流&#xff0c;是JDK8后新增的API&#xff0c;可以用于操作集合或者数组的数据 优势&#xff1a;大量结合了Lambda的语法风格&#xff0c;该方式更强大更简单&#xff0c;代码简洁&#xff0c;可读性好 常用方法 …

2023最新!Git2.40.0于win10环境下的安装

2023最新&#xff01;Git2.40.0于win10环境下的安装 git官网地址&#xff1a;https://git-scm.com/download/win/ 导航 文章目录 2023最新&#xff01;Git2.40.0于win10环境下的安装导航一、下载Git二、安装Git三、检验 一、下载Git Git官网选择自己所需的版本下载 二、安装…

社区重要还是代码重要?

Apache Software Foundation&#xff0c;简称ASF&#xff0c;是世界范围内知名的软件基金会。旗下有很多世界知名的开源软件&#xff0c;比如Apache HTTP Server、Subversion、Hadoop等。ASF在社区治理上也有自己独特的理念&#xff0c;其中有一条中国开源软件圈子比较熟知&…