进程控制-wait和waitpid进程回收

wait 阻塞函数
函数作用:
1. 阻塞并等待子进程退出
2. 回收子进程残留资源
3. 获取子进程结束状态(退出原因)
pid_t wait(int *wstatus);
返回值:
‐1 : 回收失败,已经没有子进程了
>0 : 回收子进程对应的 pid
参数 :
status 判断子进程如何退出状态
1.WIFEXITED(status): 为非 0 ,进程正常结束
返回WEXITSTATUS(status)
如上宏为真,使用此宏,获取进程退出状态的参数
2.WIFSIGNALED(status): 为非 0 ,进程异常退出
WTERMSIG(status):
如上宏为真,使用此宏,取得使进程种植的那个信号的编号
调用一次只能回收一个子进程
waitpid 函数
函数作用:同 wait 函数
pid_t waitpid(pid_t pid, int *status, int options);
参数
1.pid: 指定回收某个子进程
pid == ‐1 回收所有子进程
while( (wpid=waitpid(‐1,status,0)) != ‐1)
pid > 0 回收某个 pid 相等的子进程
pid == 0 回收当前进程组的任一子进程
pid < 0 子进程的 PID 取反(加减号)
2.status: 子进程的退出状态,用法同 wait 函数
3.options: 设置为 WNOHANG, 函数非阻塞,设置为 0 ,函数阻塞
返回值:
>0 : 返回清理掉的子进程 ID
‐1 :回收失败,无子进程
如果为非阻塞
=0 :参数 3 WNOHANG, 且子进程正在运行
#include <sys/types.h>
#include <unistd.h>
#include<stdio.h>
#include<sys/wait.h>int i=200;
int main()
{
int status;pid_t pid;
pid = fork();
if (pid>0)
{pid_t wpid;wpid=wait(&status);printf("wpid is %d\n",wpid);//nomal exit if (WIFEXITED(status)){printf("nomal exit value is %d\n",WEXITSTATUS(status));}//unnomalif(WIFSIGNALED(status)){printf("unnomal exit signal is %d\n",WTERMSIG(status));}i+=400;
printf("this is father process %d\n",getpid());printf("i=%d\n",i);
}
else if(pid==0)
{
while(1)
{sleep(1);
printf("this is child  process %d,ppid is%d\n",getpid(),getppid());
printf("i=%d\n",i);
}}for(int i=0;i<3;i++)
{printf("------i=%d\n",i);
}

程序一直执行子进程
此时打开另一个终端,终止进程,返回终止进程(异常退出)的信号 9
waitpid
#include <sys/types.h>
#include <unistd.h>
#include<stdio.h>
#include<sys/wait.h>
int i=200;
int main()
{pid_t pid;
pid = fork();
if (pid>0)
{       int status;pid_t wpid;while((wpid=waitpid(-1,&status,WNOHANG))!=-1){printf("deid wpid is %d\n",wpid);//nomal exitif (WIFEXITED(status)){printf("nomal exit value is %d\n",WEXITSTATUS(status));}//unnomalif(WIFSIGNALED(status)){printf("unnomal exit signal is %d\n",WTERMSIG(status));}i+=400;
printf("this is father process %d\n",getpid());printf("i=%d\n",i);}
}
else if(pid==0)
{printf("this is child  process %d,ppid is%d\n",getpid(),getppid());}for(int i=0;i<3;i++)
{printf("------i=%d\n",i);
}
return 0;
}

#include <sys/types.h>
#include <unistd.h>
#include<stdio.h>
#include<sys/wait.h>
int i=200;
int main()
{pid_t pid;
pid = fork();
if (pid>0)
{       int status;pid_t wpid;while((wpid=waitpid(-1,&status,WNOHANG))!=-1){
if(wpid==0)
{
continue;
}printf("deid wpid is %d\n",wpid);//nomal exitif (WIFEXITED(status)){printf("nomal exit value is %d\n",WEXITSTATUS(status));}//unnomalif(WIFSIGNALED(status)){printf("unnomal exit signal is %d\n",WTERMSIG(status));}i+=400;
printf("this is father process %d\n",getpid());printf("i=%d\n",i);}
}
else if(pid==0)
{printf("this is child  process %d,ppid is%d\n",getpid(),getppid());}for(int i=0;i<3;i++)
{printf("------i=%d\n",i);
}
return 0;
}

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

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

相关文章

蜂窝物联粮仓环境在线监测系统,确保粮食安全

在金黄的麦田里&#xff0c;每一粒小麦都承载着农民的辛勤与期待。为了保证这些宝贵粮食的品质与安全&#xff0c;储存环节显得尤为重要。传统的粮仓管理方式已难以满足现代粮食储存的需求&#xff0c;因此&#xff0c;引入智慧粮仓环境监控系统成为了必然的选择。 一、为何需…

LabVIEW在自动化测试项目中的推荐架构

在自动化测试项目中&#xff0c;推荐使用LabVIEW的生产者-消费者&#xff08;Producer-Consumer&#xff09;架构。这种架构利用队列实现数据的异步传输和处理&#xff0c;提供了高效、稳定和可扩展的解决方案。其主要优点包括&#xff1a;实现数据采集与处理的解耦、提高系统响…

MySQL的安装和启动

安装 版本 1&#xff0c;社区版&#xff1a;免费&#xff0c;不提供任何技术支持 2&#xff0c;商业版&#xff1a;可以试用30天&#xff0c;官方提供技术支持下载 1&#xff0c;下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 2&#xff0c;安装&#xff1a;傻…

在生产环境中部署Elasticsearch:最佳实践和故障排除技巧——安装篇(一)

#在生产环境中部署Elasticsearch&#xff1a;最佳实践和故障排除技巧——安装篇&#xff08;一&#xff09; 前言 关键字&#xff1a; 机器学习 人工智能 AI chatGPT 学习 实现 使用 搭建 深度 python 事件 远程 docker mysql安全 技术 部署 技术 自动化 代码 文章目录 - -…

AI大模型技术分析

一文读懂&#xff1a;AI大模型&#xff01; 引言 近年来&#xff0c;随着深度学习技术的迅猛发展&#xff0c;AI大模型已经成为人工智能领域的重要研究方向和热点话题。AI大模型&#xff0c;指的是拥有巨大参数规模和强大学习能力的神经网络模型&#xff0c;如BERT、GPT等&…

python爬虫入门(一)之HTTP请求和响应

一、爬虫的三个步骤&#xff08;要学习的内容&#xff09; 1、获取网页内容 &#xff08;HTTP请求、Requests库&#xff09; 2、解析网页内容 &#xff08;HTML网页结构、Beautiful Soup库&#xff09; 3、存储或分析数据 b站学习链接&#xff1a; 【【Python爬虫】爆肝两…

Linux多线程(上)

Linux多线程&#xff08;上&#xff09; 1.基本概念2.页表3.线程的优点4.线程的缺点5.线程使用控制5.1创建线程5.2线程终止5.3 线程取消5.4线程等待5.5获得线程的ID5.6分离线程 6.理解线程库7.命令 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1…

Transformer前置知识:Seq2Seq模型

Seq2Seq model Seq2Seq&#xff08;Sequence to Sequence&#xff09;模型是一类用于将一个序列转换为另一个序列的深度学习模型&#xff0c;广泛应用于自然语言处理&#xff08;NLP&#xff09;任务&#xff0c;如机器翻译、文本摘要、对话生成等。Seq2Seq模型由编码器&#…

linux软链接和硬链接的区别

1 创建软链接和硬链接 如下图所示&#xff0c;一开始有两个文件soft和hard。使用 ln -s soft soft1创建软链接&#xff0c;soft1是soft的软链接&#xff1b;使用ln hard hard1创建硬链接&#xff0c;hard1是hard的硬链接。可以看到软链接的文件类型和其它3个文件的文件类型是不…

【Dison夏令营 Day 11】再战篇:用 Python 构建掷骰子应用程序

构建小项目&#xff08;如基于文本的用户界面 (TUI) 掷骰子应用程序&#xff09;将帮助你提高 Python 编程技能。您将学习如何收集和验证用户输入、从模块和包中导入代码、编写函数、使用 for 循环和条件&#xff0c;以及使用字符串和 print() 函数整齐地显示输出。 在本项目中…

2024年7月6日 (周六) 叶子游戏新闻

自动电脑内部录音器AutoAudioRecorder: 是一款免费的自动音频录制软件&#xff0c;可直接将电脑内部所有的声音录制成 mp3/wav 文件&#xff0c;包括音乐、游戏直播、网络会议、聊天通话等音频源。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《不羁联盟》制作人&…

学习笔记之C++之函数的定义以及调用,函数值传递,函数的常见形式,函数的声明以及函数分文件编写详细实例学习笔记分享

C关于函数的基础知识详细笔记 1.函数的定义以及调用 语法&#xff1a; 返回值类型 函数名 参数列表 int add(int num1,int num2) { 函数体语句 return 表达式 } 返回值类型:一个函数可以返回一个值。在函数定义中 函数名:给函数起个名称 参数列表:使用该函数时&#xff0c;…

每日一题~oj(贪心)

对于位置 i来说&#xff0c;如果 不选她&#xff0c;那她的贡献是 vali-1 *2&#xff0c;如果选他 &#xff0c;那么她的贡献是 ai. 每一个数的贡献 是基于前一个数的贡献 来计算的。只要保证这个数的前一个数的贡献是最优的&#xff0c;那么以此类推下去&#xff0c;整体的val…

【聚星文社 绘唐3】MJ版一键AI工具使用文档

MJ版一键AI工具使用文档 绘唐地址下载 欢迎使用MJ版一键AI工具&#xff01;这个工具可以帮助您快速生成各种类型的文本&#xff0c;包括文章、对话、代码等等。 使用方法&#xff1a; 登录&#xff1a;首先&#xff0c;您需要登录到您的MJ版账户。如果您还没有账户&#xff0…

LabVIEW透视变换

透视变换概述源程序在www.bjcyck.com下载 透视变换是一种几何变换&#xff0c;用于对图像进行扭曲&#xff0c;使其看起来从不同角度拍摄。这在计算机视觉和图像处理领域非常重要&#xff0c;例如在投影校正和图像配准中。LabVIEW提供了强大的图像处理工具&#xff0c;利用其V…

时间、查找、打包、行过滤与指令的运行——linux指令学习(二)

前言&#xff1a;本节内容标题虽然为指令&#xff0c;但是并不只是讲指令&#xff0c; 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法&#xff0c; 很抱歉&#xff0c; 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的&#xff0c;…

uniapp启动安卓模拟器mumu

mumu模拟器下载 ADB&#xff1a; android debug bridge &#xff0c; 安卓调试桥&#xff0c;是一个多功能的命令行工具&#xff0c;他使你能够与连接的安卓设备进行交互 # adb连接安卓模拟器 adb connect 127.0.0.1:port # 查看adb设备 adb deviceshubuilderx 有内置的adb&a…

【计算机毕业设计】018基于weixin小程序实习记录

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

恢复出厂设置手机变成砖

上周&#xff0c;许多Google Pixel 6&#xff08;6、6a、6 Pro&#xff09;手机用户在恢复出厂设置后都面临着设备冻结的问题。 用户说他们在下载过程中遇到了丢失 tune2fs 文件的错误 。 这会导致屏幕显示以下消息&#xff1a;“Android 系统无法启动。您的数据可能会被损坏…

Webpack: Loader开发 (1)

概述 如何扩展 Webpack&#xff1f;有两种主流方式&#xff0c;一是 Loader —— 主要负责将资源内容翻译成 Webpack 能够理解、处理的 JavaScript 代码&#xff1b;二是 Plugin —— 深度介入 Webpack 构建过程&#xff0c;重塑 构建逻辑。 相对而言&#xff0c;Loader 的职责…