当前位置: 首页 > news >正文

僵尸进程的产生与处理

僵尸进程(Zombie Process)是指在操作系统中已经完成了执行,但其父进程尚未调用wait()waitpid()来获取其终止状态的子进程。当一个进程结束时,操作系统会保留该进程的一些基本信息,包括进程ID(PID)、退出状态等,以供父进程查询。而如果父进程没有主动调用上述函数来检索该进程的状态,那么这个进程的信息就会一直存在于操作系统的进程表中,成为僵尸进程。

如下是一个产生僵尸进程的代码

void fork7() {if (fork() == 0) {/* Child */printf("Terminating Child, PID = %d\n", getpid());exit(0);} else {printf("Running Parent, PID = %d\n", getpid());while (1); /* Infinite loop */}
}

其中子进程已经完成执行,但是进程表中仍然存在子进程的信息。,并显示为defunct状态,即zombie进程。

wait()waitpid()是用于在父进程中等待子进程终止并获取其终止状态的系统调用函数。

这两个函数的作用包括:

  1. 等待子进程的终止:父进程可以使用wait()waitpid()函数来暂停自己的执行,等待子进程结束。在子进程终止之前,父进程会一直阻塞在这个调用上。

  2. 获取子进程的终止状态:当子进程终止时,操作系统会将子进程的退出状态传递给父进程。父进程通过调用wait()waitpid()来获取子进程的终止状态,并可以根据该状态进行后续处理。终止状态可以包含子进程的退出码、终止原因等信息。

pid_t wait(int* status);

  • status参数用于保存子进程的终止状态。通过检查status变量的值,父进程可以了解子进程的终止情况。
  • wait()函数返回已终止的子进程的PID,若出错则返回-1。

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

  • pid参数用于指定等待的子进程ID。当指定为-1时,表示等待任意一个子进程终止。
  • status参数用于保存子进程的终止状态。
  • options参数用于设置额外的选项,例如WNOHANG表示非阻塞等待。

wait()waitpid()函数的返回值可以提供一些信息:

  • 返回一个大于0的值表示已终止的子进程的PID。
  • 返回0表示使用了WNOHANG选项,且当前没有已终止的子进程。
  • 返回-1表示调用出错,可能是由于权限问题或者无效的参数。

示例

void fork9() {int child_status;if (fork() == 0) {printf("HC: hello from child\n");} else {printf("HP: hello from parent\n");wait(&child_status);printf("CT: child has terminated\n");}printf("Bye\n");
}

父进程通过使用wait函数来暂停自己的执行,等待子进程结束,在子进程终止之前,父进程会一直阻塞在这个调用上

http://www.lryc.cn/news/181946.html

相关文章:

  • TouchEffects - Android View点击特效
  • 从ContinuousEventTimeTrigger/ContinuousProcessingTimeTrigger代码看如何实现一个自定义的触发器
  • Linux 5种网络模型
  • 10.1 调试事件读取寄存器
  • Linux系统常用指令篇---(一)
  • 【初识Linux】:常见指令(1)
  • STM32复习笔记(四):看门狗
  • 【C++进阶(七)】仿函数深度剖析模板进阶讲解
  • 基于SSM的电动车上牌管理系统(有报告)。Javaee项目。
  • mstsc无法保存RDP凭据, 100%生效
  • OpenGLES:绘制一个混色旋转的3D球体
  • Spring AOP 基于注解源码整理
  • C语言 —— 函数栈帧的创建和销毁
  • Appleid苹果账号自动解锁改密(自动解锁二验改密码)
  • Conflicting peer dependency: eslint@8.50.0
  • Vue3 defineProps使用
  • 机器学习7:逻辑回归
  • 生活小记-纸张尺寸
  • 【MATLAB源码-第41期】基于压缩感知算法的OFDM系统信道估计和LS算法对比仿真。
  • 优思学院|六西格玛将烹饪和美味提升至极致
  • git stash
  • Flink Data Source
  • 怒刷LeetCode的第23天(Java版)
  • Golang 中的调试技巧
  • linux 监控内存利用率
  • 43 验证二叉搜索树
  • 深度学习笔记之微积分及绘图
  • java Spring Boot按日期 限制大小分文件记录日志
  • CSS 语法
  • Vue3+TS+ECharts5实现中国地图数据信息显示