操作系统 - 进程的控制(创建与终止)

news2024/11/25 11:04:54

进程控制

文章目录

  • 进程控制
    • 进程创建
    • 进程的终止
      • wait()和waitpd()
      • 僵尸进程
      • 孤儿进程

进程创建

程序在执行的过程中,可能会创建多个进程,创建进程称为父进程,新的进程称为子进程,每个新的进程也可以创建其他进程,从而形成进程树

大多数操作系统(UNIX,Linux,Windows) 对进程的识别采用的唯一的进程标识符,每个进程都有一个唯一的pid 他可以用作索引,以便访问内核中的进程的各种属性

进程树

这是一个典型的Linux 的进程树,进程init 是作为所有的用户进程的父进程,一旦系统启动,他就可以创建各种用户进程,

一般来说,当一个进程创建子进程时,该进程会需要一定的资源(CPU 时间、内存、文件、I/O 设备)来完成任务,子进程可以从操作系统哪里直接获得资源,也可以只从父进程哪里获得资源子集,父进程可能在子进程间分配资源,(如内存或文件)限制子进程只能使用父进程的资源,可以防止创建过多进程,导致系统超载。

当进程创建新的进程时,会有两种执行可能:

  • 父进程和子进程并发执行
  • 父进程阻塞,等待某个子进程或者所有子进程执行完

子进程的地址空间也有两种可能:

  • 子进程时父进程的复制品(他与父进程有同样的数据和程序)

  • 子进程的加载另外一个进程

在一个程序调用系统调用fork() 后,子进程的地址空间会复制父进程的地址空间(此处也会用到虚拟内存的写时拷贝),这种机制允许父子进程间的轻松通信

父子进程都会执行fork() 之后的指令,唯一不同的是,子进程fork()的返回值为0,父进程则为非0.

在调用fork()以后,有个进程调用了exec(),以用新的程序来取代进程的地址空间,系统调用exec()加载二进制文件文件到内存中(破坏了包含系统调用的原来的内存内容)并进行执行,采用这种方法,这两个进程能互相通信

父进程在调用系统调用wait()能把自己移出就绪队列到阻塞队列中,从就绪态到阻塞态,直到子进程结束。

进程的终止

当进程完成指向的最终语句并且通过系统调用exit() 请求操作系统删除自身时,进程终止

此时,进程可以返回状态值 到父进程(通过系统调用wait)。所有的进程资源,如物理和虚拟内存、打开的文件和I/O缓存区等,会由操作系统释放。

  • 如果终止子进程,则父进程需要知道这些子进程的的标识符,因此,当一个进程创建子进程时,则该子进程的标识符需要传递给父进程。父进程会将其存储到他的进程控制块中。

父进程终止子进程的方式有很多 比如:

  • 子进程使用了超过他所分配到的一些资源。 这要求父进程有一个检查其子进程的状态的机制。

  • 分配给子进程的任务已不再需要。

  • 父进程退出,如果父进程终止,那么操作系统不允许子进程继续

    有的系统不允许,子进程在父进程终止的情况下继续存在,对于这类系统, 如果一个进程终止(正常或不正常)。那么它的所有子进程也被终止。这种现象,称为 级联终止,通常是由操作系统进行的。

wait()和waitpd()

1、wait的工作原理

(1)子进程结束时,系统向其父进程发送SIGCHILD信号

(2)父进程调用wait函数后阻塞

(3)父进程被SIGCHILD信号唤醒,然后去回收僵尸子进程

(4)父子进程之间是异步的,SIGCHILD信号机制就是为了解决父子进程之间的异步通信问题,让父进程可以及时的去回收僵尸子进程

(5)若父进程没有任何子进程则wait返回错误

2、参数解读

(1)wait的参数status。

  • status用来返回子进程结束时的状态,父进程通过wait得到status后就可以知道子进程的一些结束状态信息。

(2)wait的返回值pid_t。

  • 这个返回值就是本次wait回收的子进程的PID。当前进程有可能有多个子进程,wait函数阻塞直到其中一个子进程结束wait就会返回,wait的返回值就可以用来判断到底是哪一个子进程本次被回收了。

(3)小结:wait主要是用来回收子进程资源,回收同时还可以得知被回收子进程的pid和退出状态。

(4)WIFEXITED、 WIFSIGNALED、 WEXITSTATUS这几个宏用来获取子进程的退出状态。

  • WIFEXITED宏用来判断子进程是否正常终止(return、exit、_exit退出)。
  • WIFSIGNALED宏用来判断子进程是否非正常终止(被信号所终止)。
  • WEXITSTATUS宏用来得到正常终止情况下的进程返回值。

4、wait和waitpd差别

(1)基本功能一样,都是用来回收子进程的

(2)waitpid可以回收指定PID的子进程

(3)waitpid可以阻塞或者非阻塞两种工作模式

原文链接:https://blog.csdn.net/xuw_xy/article/details/105793619

僵尸进程

当一个进程终止时,操作系统会释放其资源。不过他位于进程表中的信息还是在的,直到父进程调用wait(),这是因为进程表中包含了进程的退出状态。

当一个进程终止,但是其父进程没有调用wait(),这样的进程称为僵尸进程

一旦父进程调用了wait(),僵尸进程的进程标识符和他在父进程进程表中的信息就会释放

原因可见上文中,对于wait()解读 转载部分

孤儿进程

如果父进程没有调用wait()就终止了,以致于子进程成为了孤儿进程。

Linux和UNIX 对于这种情况的处理是:

  • 进程init定期调用wait(),以便于收集任何孤儿进程的退出状态,并释放孤儿进程的进程标识符和进程表中的信息。

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

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

相关文章

警惕!ELSEVIER旗下1本双1区TOP被On Hold !请大家谨慎投稿

【SciencePub学术】又1本!双1区TOP刊被On Hold !官方现在对期刊质量的管控越来越严格了,被标记为On Hold后的期刊中,大部分的命运也是被WOS数据库剔除!所以请大家谨慎投稿! 《Information Sciences》作为一…

研发管理平台有哪些?符合软件公司需求的工具要具备这几个特征!

本人从事TOB行业十余年,目前就职的就是一家软件公司。下面,本人就站在软件公司的角度来讲一讲:我们公司做项目研发时,会选择一个什么样的研发管理工具来辅助?供大家参考。 众所周知,软件研发项目是一个复杂…

git复制他人的远程仓库到自己的远程仓库

使用 git clone <远程仓库链接> 克隆你需要的远程仓库到本地仓 然后在本地仓里找到配置文件 修改配置文件里面配置 使用 git push -u origin master 上传本地仓文件到自己的远程仓库

Django REST framework序列化器详解:普通序列化器与模型序列化器的选择与运用

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

牛客周赛 E-茜茜的计算器

原题链接&#xff1a;E-茜茜的计算器​​​​​​ 题目大意&#xff1a;在计算器上显示的0~9十个数字&#xff0c;如果这个计算器有n个位置&#xff0c;可以显示n个数字&#xff0c;问能显示多少种不同的对称数字。只能横轴和竖轴对称。 思路&#xff1a;容斥&#xff0c;最终…

css 文字下划线 text-decoration

背景&#xff1a; 在某些时候需要给文字添加特殊样式。使用 text-decoration: underline; 来为段落文字添加下划线。也有其它文本装饰样式&#xff0c;例如&#xff1a; none&#xff1a;无装饰&#xff08;去掉装饰&#xff09;overline&#xff1a;上划线line-through&…

北京十大金牌律师事务所(2024年权威高胜诉率推荐)

律师职业本身&#xff0c;是一个看起来很美、说起来很烦、听起来很阔、做起来很难的职业。所谓术业有专攻&#xff0c;律师的专业就是解决法律纠纷&#xff0c;负责为个人和组织提供法律咨询和代理法律服务。律师在执行其职责时需要遵守道德准则和法律规定&#xff0c;并以客户…

期末考试老师怎样发成绩

期末成绩的公布&#xff0c;总是让老师感到焦虑。成绩&#xff0c;这一张张的数字&#xff0c;承载着学生一学期的努力&#xff0c;也牵动着家长们的心。 传统的成绩公布方式&#xff0c;写成绩条让学生带回家&#xff0c;或是通过私发家长的方式&#xff0c;都存在一定的弊端。…

Android的轻量级存储SharedPreferences

希望文章能给到你启发和灵感&#xff5e; 感谢支持和关注&#xff5e; 阅读指南 序幕SharedPreferences怎么存储SharedPreferences支持的数据类型SharedPreferences操作模式使用范例一、基础环境说明1.1 硬件环境1.2 软件环境 二、起因三、解决3.1 尽量简化数据结构3.2 文件尽量…

高考之后,专业与学校如何选择?

随着2024年高考的结束&#xff0c;考生们面临着选择专业或学校的难题。选择专业意味着专注于一个特定领域&#xff0c;直接影响未来的职业发展和兴趣培养&#xff1b;而选择学校则提供了更优越的学术氛围和广泛的社交机会&#xff0c;对个人综合素质提升有重要作用。无论选择哪…

【Springboot系列】总结websocket的几种实现方式,建议收藏

1、前言 websocket在java中有多种实现方式&#xff0c;一直没有做一个整理&#xff0c;今天整理下三种最常用的实现方式以及一些注意点 2、javax 实现方式 之前已经单独记录了这种方式 【SpringBoot系列】springboot websocket全套模板&#xff0c;省去搭建的烦恼&#xff…

直播无线麦克风哪个好?一文揭秘无线领夹麦克风哪个牌子好!

​在人人可做自媒体的时代&#xff0c;众多普通人加入自媒体。对拍视频的自媒体人&#xff0c;好内容是基础&#xff0c;好设备是保障。想提升视频音质需专业无线麦克风。现无线麦克风品牌多&#xff0c;如何少花钱买高性价比产品是问题。作为资深自媒体人&#xff0c;我用过的…

QT实现多摄像头监控

工具使用方法&#xff1a; 1、在add camera后面输入对应摄像头的IP后&#xff0c;点击add会自动布局显示。 2、在del camera后选择一个对应IP后&#xff0c;点击del会自动删除对应摄像头的显示&#xff0c;且整体布局会自动调整。 工具使用场景&#xff1a; 测试摄像头的好坏。…

Rust 开发搜索引擎 Quickwit 替代ES,成本降低 10 倍,查询亚秒级别!

一、Quickwit 概述 Quickwit 它是云存储上最快的搜索引擎&#xff0c;它非常适合用于可观察性的云原生搜索引擎&#xff0c;如日志、跟踪以及即将推出的指标。同时也是 Datadog、Elasticsearch、Loki 和 Tempo 的开源替代方案。 二、Quickwit 功能 全文搜索和聚合查询&#…

视觉应用线扫相机速度反馈(伺服转盘)

运动控制实时总线相关内容请参考运动控制专栏&#xff0c;这里不再赘述 1、运动控制常用单位u/s运动控制单位[u/s]介绍_运动控制 unit是什么单位-CSDN博客文章浏览阅读176次。运动控制很多手册上会写这样的单位&#xff0c;这里的u是英文单词unit的缩写&#xff0c;也就是单位…

哈喽GPT-4o——对GPT-4o 提示词的思考与看法

目录 一、提示词二、常用的提示词案例1、写作助理2、改写为小红书风格3、英语翻译和改写4、论文式回答5、主题解构6、提问助手7、Nature风格润色8、结构总结9、编程助手10、充当终端/解释器 大家好&#xff0c;我是哪吒。 最近&#xff0c;ChatGPT在网络上广受欢迎&#xff0c…

持PMP证书可以免考申请CSPM-2国标证书!

一提到项目管理的专业认证&#xff0c;大家首先想到的肯定是以PMP为核心的PMI体系认证。当然也有BSI和IPMP等其他体系认证&#xff0c;但都是从国外引进的专业认证&#xff0c;我国始终缺少符合中国特色项目管理环境下的项目管理专业认证体系。 如今&#xff0c;更符合中国国情…

Python中关于电商商品数据的采集【taobao/JD/商品详情数据返回】

在Python中采集电商商品数据&#xff08;如淘宝、京东等&#xff09;通常涉及到网络爬虫&#xff08;web scraping&#xff09;或称为网络数据抓取&#xff08;web data scraping&#xff09;。由于电商平台通常会有反爬虫机制&#xff0c;因此直接抓取数据可能会遇到各种挑战&…

【Kubernetes】k8s--安全机制

机制说明 Kubernetes 作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介&#xff0c; 也是外部控制的入口。所以 Kubernetes 的安全机制基本就是围绕保护 API Server 来设计的。 比如 kubectl 如果想向 …

[JavaScript]何为变量提升?

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/139742129 出自【进步*于辰的博客】 关于编译与解释&#xff0c;详述可查阅博文《[Java]知识点》…