Linux---进程状态

目录

一、系统进程状态介绍 

 1.运行状态

2.阻塞状态

3.挂起状态

二、Linux中的进程状态

1.R (running)

2.S (sleeping)

3.D(disk sleep)

4.T(stopped)

5.t(tracing stop)

6.X(dead) 

7.Z(zombie)

三、孤儿进程


一、系统进程状态介绍 

上图是对进程状态的笼统的概念,具体在不同的操作系统中的表现是有差异的。

这里先简单解释一下进程状态在操作系统中是如何表示的:进程状态其实就是每个进程所对应的PCB结构体中的一个字段,用整形表示,如下图:

 1.运行状态

每个CUP都会有一个对应的运行队列,上面有进程等待被调度执行

只要在运行队列中的进程,都是运行状态。

注意:这里的运行状态包括了就绪,执行,在现在的操作系统中,我们对这几个状态的区分不在那么明确了

2.阻塞状态

在我们过去写过的代码中,都或多或少访问过外设,就拿scanf输入举个例子,当我们的代码执行到该条语句时,会停下来,等待我们从键盘出入数据,那么如果我们一直不输入,它就会一直等待,这种时候,进程所处的状态就是阻塞状态。

所以进程状态变化的本质:1.pcb状态字段的值发生变化 2.pcb从一个队列到另一个队列 

那么进程阻塞,我们能"宏观"看到什么?当我们在电脑上打开多个下载任务,同时还在刷视频的时候,会发现很卡,为什么?因为网卡的资源需要被很多进程访问,进程的状态不停的在运行和阻塞之间切换,而这种状态的转变通过卡顿的方式呈现了出来。

3.挂起状态

如果一个进程当前被阻塞了,注定了,这个进程在等待资源的时候,是无法被调度运行的,如果此时,恰好操作系统内的内存资源已经严重不足了,怎么办?

操作系统为了防止自己挂掉,会将该进程的数据和代码先交换到磁盘当中,释放部分内存资源

  • 将内存数据进行置换到外设,是针对所有阻塞进程的
  • 不同担心和磁盘交互慢的问题,现在的主要矛盾是系统快要挂掉了,需要让系统继续执行下去
  • 磁盘中有swap分区---操作系统内的数据会被置换到这里
  • 当进程再次被操作系统调度,被置换出去的数据和代码,会被重新加载到内存

这就是阻塞挂起,当然还有其他的挂起(只要当前进程没有被调度,就能被挂起),如就绪挂起等,但是这些挂起被调度的可能性很高,会出现大量的和外设之间的数据交互,降低操作系统的速度

注意:swap分区不能太大,会导致操作系统太过于依赖置换操作,导致操作系统变慢

二、Linux中的进程状态

1.R (running)

当我们在循环打印语句的时候,会发现进程的状态几乎都在S,而不在R,但是我们能看到屏幕在不停的刷Hello world,为什么?其实是因为CPU太快了,进程的状态基本在等待打印,从侧面说明IO(输入输出)相较于CPU是很慢的

而当我们只循环,不打印的时候,进程就一直处于R运行状态,本质是循环判断是CPU执行的,所以进程一直在CPU上运行

这里说明一下+表示该进程是前台进程,特点:能被ctrl+C终止,且bash命令行失效,即不能再执行输入的命令,后台进程的特点与之相反

 2.S (sleeping)

休眠状态,浅度睡眠,可以被终止,能对外部信号做出响应。属于阻塞状态的一种。

3.D(disk sleep)

深度睡眠,不能被终止(即操作系统没有能力杀掉这个进程),也属于阻塞状态的一种。

那么为什么要设计这个状态呢?

主要是防止下面这种情况的发生:当进程向磁盘写入数据时,恰好操作系统太忙了,快要挂掉了,这时Linux操作系统会采取杀掉进程的方式来缓解压力,而该进程正好处于阻塞状态被杀掉,但是数据写入失败,这时数据就会被丢弃,造成损失。

所以我们需要设计一个状态不能被杀掉,只能等它完成任务自动醒来,这就是深度睡眠状态

这个状态一般很难观察到,一旦观测到有好几个进程处于D状态,就说明操作系统快挂了

4.T(stopped)

上面的是进程信号,我们可以用18和19两个信号来控制进程的停止和继续(其他的信号我们暂且不管,有兴趣的可以去百度)

一般进程在访问软件资源的时候,可以暂时不让进程进行访问,会将进程设置为T状态

5.t(tracing stop)

当我们在调试程序时,给程序设置断点在运行到断点,程序停止之后的状态就是t状态,需要等待软件资源就绪,也就是说gdb会给程序发送信号,而为什么一个进程能等待另一个进程的资源就绪, 本质是因为进程pcb中也存在进程等待队列

6.X(dead) 

死亡状态,也就是终止状态,这是个瞬时状态。

7.Z(zombie)

僵尸状态,就是进程死亡之前的一个状态,用来回收该进程的退出信息,简单来说就是进程运行结束后,我们需要知道该进程的任务完成的怎么样,所以该进程的pcb不会立即释放(该进程的代码和数据可以释放,OS会将它的退出信息写入它的pcb中),需要等待它的父进程回收这些退出信息后,才能释放,这个过程的状态就叫僵尸状态。

我们写main函数都会在最后return 0,就是告诉操作系统,该进程成功结束了,当然也可以返回1,2,3等等,用来表示一些退出信息

下面给大家演示一下僵尸状态

当父进程不去回收子进程的退出信息的时候,子进程会一直处于僵尸状态,造成内存泄漏

三、孤儿进程

上面的僵尸进程,是子进程结束,父进程不回收子进程的退出状态引发的,那如果父进程先退出,子进程又会怎么样呢?

当父进程退出后,bash进程会将父进程的退出信息回收,所以父进程能被正常退出,但是子进程没有被退出,这时它就成了孤儿进程,要被1号进程(操作系统)领养,这里要注意父进程只会对子进程的负责,所以bash作为子进程的爷爷进程,不会回收它,所以子进程依旧不会终止,而是被操作系统领养(这里的父进程和子进程特指代码中父子进程,bash进程和父进程具有父子关系,所以称bash为子进程的爷爷进程) 

如果子进程不被领养,那么一旦子进程结束,它的退出信息就无法被回收,该进程就会处于僵尸状态,无法正常退出,造成内存泄漏

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

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

相关文章

OpenHarmony应用开发环境搭建指南

OpenHarmony的应用开发主要是基于Deveco Studio(目前只支持Windows及Mac平台)搭配相应的SDK进行,现对开发环境的搭建进行说明。 1:Deveco下载安装 下载对应平台的安装包即可。接下来以Windows平台为例,进行开发环境的搭建。 下载…

楼宇对讲、可视门铃案例分析

语音通话芯片:D34018,D34118,D5020,D31101; D34018 单片电话机通话电路,合并了必 需的放大器、衰减器和几种控制 功能,包括发送和接收衰减器、 背景噪声电平检测系统和一个衰 减器控制系统,对发送和接收电 平好于背景噪声做出反…

PyCharm添加自动函数文档注释

目录 1、背景2、开启PyCharm自动函数文档注释 1、背景 规范的函数文档注释有助于他人理解代码,便于团队协作、提高效率。但如果我们自己手写函数文档注释将非常耗时耗力。PyCharm安装后默认没有开启自动化函数文档注释,需要我们开启 2、开启PyCharm自动…

反序列化 [SWPUCTF 2021 新生赛]ez_unserialize

打开题目 查看源代码 得到提示&#xff0c;那我们用御剑扫描一下看看 我们知道有个robots.txt&#xff0c;访问一下得到 那我们便访问一下 cl45s.php看看 得到网站源代码 <?phperror_reporting(0); show_source("cl45s.php");class wllm{public $admin;public …

55.0/CSS 的应用(详细版)

目录 55.1.1 设计边框样式 55.1.2 调整边框的粗细 55.1.3 边框颜色 55.1.4 复合设置边框 55.2 模块的边距 55.3 模块的内边距 55.4 层的应用 55.4.1 层的建立 55.4.2 浮动——float 55.4.3 清除浮动 55.4.4 层的定位 55.4.5 设置层的溢出——overflow 55.4.6 设置鼠…

Linux开发工具——vim篇

vim开发工具的使用 文章目录 vim开发工具的使用认识vimvim常用三种模式vim正常模式命令集模式切换移动光标删除文字赋值替换撤销上一次操作更改跳到指定的行 vim末行模式命令集列出行号跳到文件中的某一行&#xff1a;保存文件离开vim查找字符&#xff1a; 总结题外话&#xff…

spring使用@Autowired @Lazy 注解 解决循环依赖

今天在启动项目时报错&#xff1a;org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘colorController’: Unsatisfied dependency expressed through field ‘projectService’; nested exception is org.springframework.…

使用Dropzone提升开发效率的全方位指南

开发过程中&#xff0c;文件上传、图像处理、脚本执行等任务常常是不可或缺的环节。为了提升开发效率&#xff0c;开发者需要一个强大且灵活的工具。在这方面&#xff0c;Dropzone 是一个非常优秀的选择。本文将介绍如何在各种使用场景下&#xff0c;利用 Dropzone 工具来提高开…

【数据结构和算法】子数组最大平均数 I

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 滑动窗口含义 2.2 滑动窗口一般解法 2.3 方法一&#xff1a;滑动窗口 三、代码 3.1 方法一&#…

异步编程Promise

文章目录 前言一、关于 Promise 的理解与使用1.相关知识补充区别实例对象和函数对象同步回调异步回调Js中的错误&#xff08;error&#xff09;和错误处理 2.promise是什么 二、Promise 原理三、Promise 封装 Ajax四、async 与 await总结 前言 在项目中&#xff0c;promise的使…

Easyrecovery2024手机版文件数据恢复软件

Easyrecovery是著名数据恢复厂商Kroll Ontrack推出文件的恢复软件&#xff0c;因病毒、误删、U盘故障等问题导致的word/excel/ppt/照片等文件丢失的情况&#xff0c;Easyrecovery能做到较高的恢复成功率&#xff01;Easyrecovery是全球著名数据恢复厂商Kroll Ontrack推出的文件…

.Net Attribute 什么是特性、预定义特性使用(一)

什么是特性&#xff1f; 特性&#xff08;Attribute&#xff09;是用于在运行时传递程序中各种元素&#xff08;比如类、方法、结构、枚举、组件等&#xff09;的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面…

Git报错x509: certificate signed by unknown authority

下载报错&#xff1a; Error downloading object: model-00001-of-00008.safetensors (ed3ac49): Smudge error: Error downloading model-00001-of-00008.safetensors (ed3ac4983f682a999b0e4b6f072aad294c4fd9a7e968e90835ba5c4b466d3c7c): LFS: Get https://cdn-lfs.huggin…

【matlab】绘制横状单组渐变柱状图

% matlab绘制横状渐变柱状图 clear;clc;close all; x1:20; a[1 -1 2 -2 3 -3 4 -4 5 -5 6 -6 7 -7 8 -8 9 -9 10 -10]; close all; b0.8; figure barh(a,b,‘FaceColor’,‘none’) % 颜色包 cmap load(‘D:\matlab_work\函数名为colormore的颜色索引表制作\colormore_txt\colo…

Redis-网络模型

参考资料 &#xff1a;极客时间 Redis&#xff08;亚风&#xff09; 前置知识 系统隔离 为了避免⽤户应⽤导致冲突甚⾄内核崩溃&#xff0c;⽤户应⽤与内核是分离的&#xff1a; 进程的寻址空间会划分为两部分&#xff1a;内核空间、⽤户空间 • ⽤户空间只能执⾏受限的命令&…

Linux笔记---系统信息

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Linux学习 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 命令 1. uname - 显示系统信息 2. hostname - 显示或设置系统主机名 3. top - 显示系统资源使用情况 4. df - 显示磁盘空间使用情…

【2023 英特尔On技术创新大会直播 |我与英特尔的初次相遇】—— AIPC探索下一代的物联网时代

&#x1f308;个人主页: Aileen_0v0 &#x1f525;系列专栏:英特尔技术学习专栏 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 硅谷经济的发展与挑战 Intel开发者云与AI技术的应用 AI压缩技术的发展与应用 英特尔与阿里巴巴在AI领域的合作 AIPC时代的…

【已解决】解决Springboot项目访问本地图片等静态资源无法访问的问题

今天在开发一个招聘系统的时候&#xff0c;有投递简历功能&#xff0c;有投递就会有随之而来的查看简历对吧&#xff0c;我投递过的简历&#xff0c;另存为一个文件夹&#xff0c;就是说本地磁盘(或者服务器)有一个专门存放投递过的简历的文件夹&#xff0c;用于存放PDF&#x…

重新配置torch1.8 cuda11.1 torchtext0.9.0虚拟Pytorch开发环境

这里写目录标题 起因发现选择安装cuda 11.1核对下自己的显卡是否支持下载该版本的CUDACUDA下载地址CUDA安装过程 在anaconda中创建一个虚拟环境1.以下是环境的配置过程2.查看虚拟环境列表3.激活虚拟环境 安装torch和torchtext包的过程1.输入下面这句代码&#xff0c;就可以直接…

韩语中的一次多用-柯桥基础韩语学习

1.动词&#xff0c;写 일기를 쓰다 写日记 2.动词&#xff0c;戴&#xff08;帽子&#xff0c;眼镜&#xff0c;口罩&#xff09; 안경을 쓰다 戴眼镜 3.动词&#xff0c;使用&#xff08;材料&#xff0c;道具&#xff0c;手段&#xff09; 세제를 쓰다 使用洗剂 4.动词&am…