进程创建,程序加载运行,以及进程终止,什么是僵尸进程,什么是孤儿进程

2024-03-22 08:12

本文主要是介绍进程创建,程序加载运行,以及进程终止,什么是僵尸进程,什么是孤儿进程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

进程控制

创建进程,撤销进程,实现进程转换(必须一气呵成,使用原语)

原语不被中断是因为有关中断指令

创建进程

撤销进程

进程创建fork

fork()函数会创建一个子进程,子进程会返回0,父进程会返回子进程的id所以才会有ifelse

虽然是复制但是数据是不一样的,进而导致后面的结果不一样

程序的加载和执行

等待和终止进程

exit 子进程完毕,父进程的wait还没完毕,这段时间子进程是半死不活,僵尸状态

祖宗进程会定期扫描 pcb队列看有没有僵尸状态进程

当一个进程创建了一个子进程后,通常会使用等待函数来等待子进程的结束。这样可以确保父进程在子进程执行完毕后再继续执行,或者获取子进程的退出状态。

以下是父进程等待子进程结束的典型执行流程:

  1. 父进程创建子进程。

  2. 子进程执行自己的任务。

  3. 父进程调用等待函数(如wait()waitpid()),进入阻塞状态,等待子进程的结束。

  4. 如果子进程结束了,操作系统会通知父进程,父进程从等待函数返回,并获取子进程的退出状态。

  5. 父进程根据需要处理子进程的退出状态,然后继续执行自己的任务。

  6. 如果父进程在子进程结束前就退出了,子进程将会成为孤儿进程,而不是僵尸进程。孤儿进程将被 init 进程(通常是进程 ID 为 1 的进程)接管,并且在子进程结束后,init 进程会负责回收子进程的资源,这样就避免了僵尸进程的产生。

父进程在子进程结束之前退出可能发生在以下几种情况下:

  1. 父进程意外终止:父进程在创建子进程后,由于某种原因意外终止,例如由于错误或异常而导致父进程崩溃或被终止。在这种情况下,子进程可能会继续执行,而父进程已经退出。

  2. 父进程主动退出:父进程在创建子进程后,执行完自己的任务后主动退出,而不等待子进程结束。这可能是因为父进程的设计或逻辑决定在某一时刻结束执行,而不必等待子进程的完成。

  3. 并行执行:父进程和子进程可能并行执行,而不是串行执行。在这种情况下,父进程不会阻塞等待子进程的完成,而是继续执行自己的任务,最终可能在子进程之前退出。

在父进程仍处于等待状态而子进程已经结束的情况下,通常是由于父进程没有处理子进程退出状态所导致的。这可能出现在以下几种情况下:

  1. 父进程忘记或没有调用等待函数:父进程创建了子进程后,忘记或者没有在合适的时候调用等待函数(如wait()waitpid())来等待子进程的退出状态。这样会导致子进程结束时,其状态被操作系统保留,而父进程仍然处于等待状态。

  2. 父进程被阻塞或无法处理子进程退出状态:父进程可能因为其他原因而被阻塞,无法处理子进程的退出状态。例如,父进程可能在等待某些资源,或者被其他任务占用,无法及时处理子进程的退出。

  3. 父进程异常终止:在某些情况下,父进程可能由于错误或异常而意外终止,而未能处理子进程的退出状态。

这篇关于进程创建,程序加载运行,以及进程终止,什么是僵尸进程,什么是孤儿进程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/834907

相关文章

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

Python如何精准判断某个进程是否在运行

《Python如何精准判断某个进程是否在运行》这篇文章主要为大家详细介绍了Python如何精准判断某个进程是否在运行,本文为大家整理了3种方法并进行了对比,有需要的小伙伴可以跟随小编一起学习一下... 目录一、为什么需要判断进程是否存在二、方法1:用psutil库(推荐)三、方法2:用os.system调用

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

Java终止正在运行的线程的三种方法

《Java终止正在运行的线程的三种方法》停止一个线程意味着在任务处理完任务之前停掉正在做的操作,也就是放弃当前的操作,停止一个线程可以用Thread.stop()方法,但最好不要用它,本文给大家介绍了... 目录前言1. 停止不了的线程2. 判断线程是否停止状态3. 能停止的线程–异常法4. 在沉睡中停止5