wait函数() waitpid函数()

wait函数

/*#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *wstatus);功能:等待任意一个子进程结束,如果子进程结束或者中断了,那么就回收他的资源参数: wstatus进程退出时的状态信息,传入的是一个int类型的地址,传出参数返回值:成功:返回了被回收的子进程的ID失败:-1(所有的子进程结束了,调用函数失败了)调用wait函数的进程会被挂起(阻塞),知道他的一个子进程退出或者收到一个不能被忽略的信号才被唤醒如果没有子进程,函数立刻返回-1,如果子进程全部结束,也返回-1
*/
#include<sys/wait.h>
#include<sys/types.h>
#include<stdio.h>
#include<unistd.h>
int main() {pid_t pid;for(int i = 0; i < 5; i++) {pid = fork();if(pid == 0) {break;}}if(pid > 0) {while(1) {printf("父, pid = %d\n", getpid());int ret = wait(NULL);printf("child die, pid = %d", ret);sleep(1); }            } else if(pid == 0) {while(1) {printf("儿, pid = %d \n", getpid());sleep(1);}}
}

#include<sys/wait.h>
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main() {pid_t pid;for(int i = 0; i < 5; i++) {pid = fork();if(pid == 0) {break;}}if(pid > 0) {while(1) {printf("父, pid = %d\n", getpid());// int ret = wait(NULL);int st;int ret = wait(&st);if(ret == -1) break;if(WIFEXITED(st)) {//是不是正常退出printf("退出的状态码:%d\n", WEXITSTATUS(st));}if(WIFSIGNALED(st)) {//是不是正常退出printf("被那个信号干掉了:%d\n", WTERMSIG(st));}printf("child die, pid = %d", ret);sleep(1); }            } else if(pid == 0) {//while(1) {printf("儿, pid = %d \n", getpid());sleep(1);//}exit(0);}
}

因为exit(0)所以退出的状态码0  如果exit(2)那么就是2

如果通过kill -9 杀死进程  那么宏WIFSIGNALED就生效 输出那句话

waitpid函数

/*#include <sys/types.h>#include <sys/wait.h>pid_t wait(int *wstatus);pid_t waitpid(pid_t pid, int *wstatus, int options);功能:等待任意一个子进程结束,如果子进程结束或者中断了,那么就回收他的资源参数: pid:pid > 0:某个子进程的pidpid = 0:回收当前进程组的所有子进程pid = -1:回收所有的子进程 相当于wait()pid < -1: 某个进程组的组id的绝对值,回收指定进程组中的子进程wstatus进程退出时的状态信息,传入的是一个int类型的地址,传出参数options:0:表示阻塞的WNOHANG:非阻塞返回值:> 0:返回了子进程的ID= 0:options = WNOHANG, 表示还有子进程活着= -1;表示错误或者没有子进程调用wait函数的进程会被挂起(阻塞),知道他的一个子进程退出或者收到一个不能被忽略的信号才被唤醒如果没有子进程,函数立刻返回-1,如果子进程全部结束,也返回-1
*/
#include<sys/wait.h>
#include<sys/types.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main() {pid_t pid;for(int i = 0; i < 5; i++) {pid = fork();if(pid == 0) {break;}}if(pid > 0) {while(1) {sleep(1); printf("父, pid = %d\n", getpid());// int ret = wait(NULL);int st;int ret = waitpid(-1, &st, WNOHANG);if(ret == -1) break;else if(ret == 0) {continue;}else if(ret > 0){if(WIFEXITED(st)) {//是不是正常退出printf("退出的状态码:%d\n", WEXITSTATUS(st));}if(WIFSIGNALED(st)) {//是不是正常退出printf("被那个信号干掉了:%d\n", WTERMSIG(st));}printf("child die, pid = %d", ret);}     }            } else if(pid == 0) {while(1) {printf("儿, pid = %d \n", getpid());sleep(1);}exit(0);}
}

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

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

相关文章

5.docker可视化工具(Portainer)

本文操作&#xff0c;在 192.168.204.102 机器执行 安装最新版 portainer&#xff0c;请使用 portainer/portainer-ce 镜像。图片来源&#xff1a;https://hub.docker.com/r/portainer/portainer。   来这里可查看最新版本&#xff1a;https://github.com/portainer/p…

面试官:我们深入聊聊Java虚拟机吧

哈喽&#xff01;大家好&#xff0c;我是奇哥&#xff0c;一位专门给面试官添堵的职业面试员 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】更有我为大家准备的福利哟&#xff01; 文章目录 前言面试Java虚拟机内存模型垃圾收集器…

nowcoder NC30 缺失的第一个正整数

目录 题目描述&#xff1a; 分析&#xff1a; 完整代码&#xff1a; 题目链接&#xff1a; https://www.nowcoder.com/share/jump/819478881694767416272 题目描述&#xff1a; 给定一个无重复元素的整数数组nums&#xff0c;请你找出其中没有出现的最小的正整数 进阶&am…

vueshowpdf 移动端pdf文件预览

1、安装 npm install vueshowpdf -S2、参数 属性说明类型默认值v-model是否显示pdf--pdfurlpdf的文件地址String- scale 默认放大倍数 Number1.2 minscale 最小放大倍数 Number0.8 maxscale 最大放大倍数 Number2 3、事件 名称说明回调参数closepdf pdf关闭事件-pdferr文…

Feign远程接口调用

概述 目的&#xff1a;解决微服务调用问题。如何从微服务A调用微服务B提供的接口。 特性&#xff1a; 声明式语法&#xff0c;简化接口调用代码开发。像调用本地方法一样调用其他微服务中的接口。集成了Eureka服务发现&#xff0c;可以从注册中心中发现微服务。集成了Spring…

ZTMap是如何在相关政策引导下让建筑更加智慧化的?

近几年随着智慧楼宇概念的深入&#xff0c;尤其是在“十四五规划”“新基建”“数字经济”等相关战略和政策的引导下&#xff0c;智慧楼宇也迎来了快速发展期&#xff0c;对推动智慧城市系统的建设越来越重要。那么究竟什么是智慧楼宇呢&#xff1f;智慧楼宇其实就是整合楼宇内…

Linux:基础开发工具之Makefile和缓冲区的基本概念

文章目录 动静态库自动化构建代码缓冲区原理实现具体实现 动静态库 首先要知道什么是链接&#xff1a; C程序中&#xff0c;并没有定义printf的函数实现,且在预编译中包含的stdio.h中也只有该函数的声明,而没有定义函数的实现 系统把这些函数实现都被做到名为 libc.so.6 的库…

【计算机网络】传输层协议——TCP(下)

文章目录 1. 三次握手三次握手的本质是建立链接&#xff0c;什么是链接&#xff1f;整体过程三次握手过程中报文丢失问题为什么2次握手不可以&#xff1f;为什么要三次握手&#xff1f; 2. 四次挥手整体过程为什么要等待2MSL 3. 流量控制4. 滑动窗口共识滑动窗口的一般情况理解…

EasyX图形化界面

这里写目录标题 EasyX绘制简单的图形化窗口窗口坐标设置窗口属性实现基本绘图功能贴图原样贴图透明贴图认识素材 代码步骤 按键交互阻塞按键 鼠标交互 EasyX 绘制简单的图形化窗口 代码示例&#xff1a; while&#xff08;1&#xff09;&#xff1b; 可以防止闪屏 窗口坐标 …

matlab根轨迹绘制

绘制根轨迹目的就是改变系统的闭环极点&#xff0c;使得系统由不稳定变为稳定或者使得稳定的系统变得更加稳定。 在使用PID控制器的时候&#xff0c;首先要确定的参数是Kp&#xff0c;画成框图的形式如下&#xff1a; 也就是想要知道Kp对系统性能有哪些影响&#xff0c;此时就…

设计模式之代理模式的懂静态代理和动态代理

目录 1 概述1.1 如何实现&#xff1f;1.2 优点1.3 缺点1.4 适用场景 2 静态代理实现3 JDK 动态代理实现4 CGlib 动态代理实现5 总结 1 概述 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它的概念很简单&#xff0c;它通过创建一个代理对象来…

便捷又炸街!Mate 60的智感支付,是如何做到快速又安全的?

扫码支付已成为线下消费的主流付款方式&#xff0c;平时出门&#xff0c;手机一带&#xff0c;钱包拜拜&#xff01; 以微信支付为例&#xff0c;正常线下支付&#xff0c;手机解锁状态下&#xff1a; 第一步&#xff1a;找到微信APP&#xff1b; 第二步&#xff1a;打开右上…