什么是孤儿进程和僵死进程?

devtools/2024/9/24 12:20:27/

一、前言

本文先介绍unix系统中进程的退出以及终止过程,然后介绍什么是孤儿进程以及僵死进程。包含如下内容:
1.进程终止过程
2.孤儿进程
3.僵死进程

二、进程终止的过程

2.1 进程的终止状态

进程终止分为正常终止和异常终止。
正常终止包括如下5种情况:

1.在main函数中调用return
2.调用exit函数
3.调用_exit或_Exi函数
4.进程的最后一个线程在其启动例程中调用return
5.进程的最后一个线程调用thread_exit函数

异常终止的3种情况:

1.调用abort
2.进程接收到某些信号
3.最后一个线程对取消请求做出响应。

ps:无论进程如何终止,最终都会执行内核中的同一段代码,这段代码为相应进程关闭所有打开的文件描述符,释放其所使用的存储器等。

2.2 父进程如何获取子进程的终止状态

无论是哪种终止情况,我们都希望父进程能够获取到子进程的终止状态。对于正常的退出,比如调用exit类函数,内核会将其退出状态转换为终止状态。如果是异常退出,内核会产生一个异常终止的状态。无论是哪种情况,终止进程的父进程都能通过wait或者waitpid获取子进程的终止状态。

三、孤儿进程

一个进程调用了fork创建了子进程后,当子进程退出时,父进程能够通过wait或waitpid获取子进程的退出状态。但是,如果一个进程在其子进程结束前终止了,子进程失去了父进程就成为了孤儿进程。
当一个父进程终止时,内核会检查所有活动的进程,判断这些进程是否是将要终止进程的子进程,如果是的话,会将这些子进程的父进程设为init进程,确保每一个子进程都有父进程。

四、僵死进程

所谓的僵死进程,指的是一个子进程已经终止了,但父进程还未释放子进程相关资源,那么该子进程就是僵死进程。
简单来说,就是已经终止了,但是资源还未释放完全的进程。
出现僵死进程是有原因的:当一个进程终止时,我们希望父进程还是能够获取到子进程的终止状态,因此,即使子进程已经终止了,还是会保留一小块内存去存储子进程的终止状态等信息,直到父进程通过wait或者waitpid获取这些信息后才会完全释放。
init进程的子进程终止后是不会成为僵死进程的,因为init进程被设计成只要有子进程终止,就会调用wait获取其终止状态。

参考资料:

《UNIX环境高级编程(第3版) (史蒂文斯 (W.Richard Stevens) 拉戈 (StephenA.Rago))(Z-Library)》


http://www.ppmy.cn/devtools/116485.html

相关文章

使用【Sa-Token】实现Http Basic 认证

使用Sa-Token开源架构快速实现Http Basic 认证&#xff0c;如上图 1、springboot环境下直接添加starter即可 <!-- Sa-Token 权限认证&#xff0c;在线文档&#xff1a;https://sa-token.cc --> <dependency><groupId>cn.dev33</groupId><artifactI…

axios封装RESTful API 接口

RESTful API 概念 RESTful API &#xff08;Representational State Transfer&#xff09;是一种设计风格和架构原则&#xff0c;用于构建网络应用程序的接口。它基于 HTTP 协议&#xff0c;并使用一组规范来定义和处理资源。 RESTful API 的核心概念是资源&#xff08;Resou…

性能监控之Python实战SkyWalking链路追踪

文章目录 一、介绍二、SkyWalking支持的语言三、SkyWalking安装3.1 前提准备3.2 先安装ElasticSearch7.X3.3 Skywalking-OAP 安装3.4 Skywalking-UI 界面安装3.5 访问页面检查SkyWalking是否可以访问 四、Python 项目接入SkyWalking4.1 演示项目代码4.2 验证 sw-python4.3 配置…

为什么 Feign 要用 HTTP 而不是 RPC?

一、引言 在现代微服务架构中&#xff0c;服务之间的通信是至关重要的环节。Feign 是一种常用的声明式 HTTP 客户端工具&#xff0c;它简化了服务间的调用过程。然而&#xff0c;在服务通信的领域中&#xff0c;除了基于 HTTP 的方式&#xff0c;还有 RPC&#xff08;Remote Pr…

无人机之AI跟踪篇

无人机的AI识别技术依托于计算机视觉和深度学习技术&#xff0c;实现了对目标的快速精准识别&#xff0c;在多个领域展现出了巨大的应用潜力和价值。以下是对无人机AI识别技术的详细解析&#xff1a; 一、无人机AI识别算法的基础原理 无人机AI识别算法主要基于先进的计算机视觉…

架构设计笔记-5-软件工程基础知识

知识要点 按软件过程活动&#xff0c;将软件工具分为软件开发工具、软件维护工具、软件管理和软件支持工具。 软件开发工具&#xff1a;需求分析工具、设计工具、编码与排错工具。 软件维护工具&#xff1a;版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工…

第十章 从0-1搭建一个简单的JavaWeb系统(二)

目录 一、完整工程目录结构 ​二、导入资源 三、编写代码 四、最终运行效果 五、未完待续 本章节的每一段代码&#xff0c;建议全部自己敲一遍&#xff0c;加深印象&#xff0c;切勿直接复制黏贴。 一、完整工程目录结构 本章实现页面登录功能&#xff0c;工程代码结构…

[SWPUCTF 2021 新生赛]Do_you_know_http

很基础的一题&#xff0c;就是修改发送的数据包 1.拿到题目&#xff0c;他让我们使用这个WLLM浏览器&#xff0c;那我们就用bp抓包&#xff0c;修改成User-Agent:WLLM 2.得到响应有个a.php文件&#xff0c;那我们就访问一下&#xff0c;发现请求权限不够&#xff0c;ip地址不对…