【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态

这篇具有很好参考价值的文章主要介绍了【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:Linux从入门到精通⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学更多操作系统知识
  🔝🔝


【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器

1. 前言

很明显,进程状态的本质就是进程
PCB结构体中的一个变量,它可能
是用宏定义来实现的,也可能是其他方式

#define NEW 1
#define RUNNING 2
#define BLOCK 3
strcut PCB
{
	...其他信息
	int state;//进程状态
}
if(PCB->state==NEW)
{将进程放入运行队列}
else if(PCB->state==BLOCK)
{将进程放入阻塞队列}
......

本章重点:

本篇文章着重讲究操作系统中的
三种进程状态:运行状态,阻塞状态
挂起状态.并且讲解Linux操作系统
中具体的进程状态,其中R状态(运行状态)
和S状态(睡眠状态)最常见!

Linux中常见的六种状态:

【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器
【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器

还有一种状态就是z状态(僵尸状态)


2. 操作系统中进程的运行状态

现在我们使用的电脑,手机有四核的
有八核,十二核的,也就是有多个CPU
然而不管有多少个CPU,每一个CPU
都有一个对应的运行队列,CPU会去
此队列中寻找数据来做处理

【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器

只要一个进程在运行队列中,它就是运行状态

不管一个进程是否正在被处理,只要它在
运行队列中,那么它就是处于运行状态!


3. 操作系统中进程的阻塞状态

我先来描述一下进程会阻塞的情况:

当CPU处理一个PCB时,我们写的
代码中或多或少会去访问操作系统
里的某些资源,比如:磁盘,键盘,网卡

最简单的例子,当代码出现scanf
或者cin时,系统会等待用户输入,只要
不输入,要访问的资源就没有就绪
此时代码就无法运行!

【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器

此时进程就处于阻塞状态了吗?
对!但是不完全对!
我想给大家阐述的更细致一点

我们知道,系统中的硬件是通过
管理硬件数据来间接被操作系统
管理起来的,所以操作系统是很清楚
硬件现在是否具备访问条件,那么
操作系统是怎样知道的呢?
其实每一个设备的结构体中,都有
变量:PCB* wait_queue,也就是
等待队列,请看下图仔细分析:

【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器

将一个进程从运行队列移动至设备
的等待队列中,再将状态改为阻塞
此时这个进程就处于阻塞状态

每个CPU或是设备都有自己的队列
进程状态变化的本质就是:

  1. 更改PCB中status的整数变量
  2. 将PCB链接到不同的队列中!

4. 操作系统中进程的挂起状态

想象一下以下情况

如果现在有很多进程被阻塞(不同设备)
注定了这些进程在它所等待的资源没有
就绪的时候,该进程是无法被调度的,如果
此时,恰好操作系统的内存资源已经严重不足
那么现在应该这样做才能拯救操作系统呢?

答案是,因为此时进程处于阻塞
状态,并且内存已严重不足,所以
OS会将PCB对应的数据和代码
弄到磁盘,为内存腾出一部分空间
此时,进程就被挂起了!

【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器

注意,将内存数据换到外设上
这一操作是针对所有阻塞进程的
不用担心与外设频繁交互会降低
操作系统的效率,因为此时要关心
的是操作系统还能不能存活下去!
注意,swap分区是磁盘中真实存在的
它的大小往往是很小的,这个部分专门
用于内存严重不足时和内存进行交互
并且当内存情况缓解后,曾经被置换
出去的代码和数据又会重新加载进来!

5. Linux下特定的进程状态

先来看看我在库中找的状态的定义:

【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器

【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器

今天的主角是R和S状态
先来写一段程序来看看效果:

#include <stdio.h>    
#include <unistd.h>    
int main()    
{    
    while(1)    
    {    
        sleep(1);    
        printf("hello hdu\n");    
    }                                                                                                                                                                   
    return 0;    
}  

运行此程序后查看进程状态:

【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器

按照常理来说,一个正在运行的程序
应该是处于R状态的,但是这个程序
为什么处于S状态呢(+号先不管,后面会讲)

这是因为循环打印时,IO输出是很慢的
打印字符会和外设屏幕交互,所以大
部分时间进程都处于阻塞状态,可能
只有百分之1的时间在打印,所以查看
进程状态时,大部分都是S状态,只有很少
一部分是R状态但是如果while(1)中
什么代码都没有,则程序一直处于R状态


6. 前台进程和后台进程的区别

我先给出概念再来解释:

  • 前台进程:运行时无法使用bash外壳的指令
    并且可以被CTRL C强制终止掉

  • 后台进程:运行时可输入指令,不能被CTRL C掉
    只能使用kill指令来杀掉进程.

将程序变成后台程序:

运行进程时加上: &
如: ./mybin &

先来对比观察一下前后台进程:

前台进程和后台进程区别


7. 休眠状态和磁盘休眠状态

细心的同学可能已经发现了
这几种状态中有两个很相似的状态:
【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态,Linux从入门到精通,linux,运维,服务器
S被称为浅度睡眠
D被称为深度睡眠

想象一下下面的这种情况:

我们从QQ,微信上下载一个文件
本质上就是将数据拷贝至磁盘,但是
目前这个文件很大,需要拷贝很久
但是此时操作系统的内存恰恰不足了
需要干掉一些进程来保证操作系统存活
此时若恰好将正在拷贝到磁盘的进程杀掉
了,那么也就是拷贝失败了,如果文件非常
的重要,那么操作系统就要背锅了,所以
OS创造了D状态:磁盘休眠状态!

所以我们得出一个重要的结论:

  1. S(sleeping):浅度休眠,浅度睡眠,可以被终止
  2. D(disk sleep):深度休眠,为了防止向磁盘写入
    重要资源时被杀掉而专门创建的一个分类!

8. 总结以及拓展

了解Linux中进程的分类可以更进一步
的了解进程在操作系统中的运行关系
所以进程状态是学习进程中必不可少的
一课!我们和进程的故事还远远没有结束!

拓展阅读:什么是僵尸进程?

什么是僵尸进程文章来源地址https://www.toymoban.com/news/detail-712867.html


到了这里,关于【linux进程(三)】进程有哪些状态?--Linux下常见的三种进程状态的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [入门篇]Linux操作系统fork子进程的创建以及进程的状态 超超超详解!!!我不允许有人错过!!!

    目录 0.前言 1.fork()创建子进程讲解 1.1fork()的简单介绍 1.2 创建子进程详解 1.2.1 如何理解fork创建子进程 1.2.2 子进程的PCB以及子进程的代码和数据 1.2.3为什么要共享写时拷贝 1.2.4 什么时候发生写时拷贝 1.3 fork函数返回值详解 1.3.1引入fork返回值的作用 1.3.2 fork返回执行逻辑剖析

    2024年03月21日
    浏览(63)
  • Linux的三种配置 IP方法

    说明: 使用nmcli命令配置的网络配置可以立即生效且系统重启后配置也不会丢失。 nmcli介绍 nmcli 是NetworkManager的一个命令行工具,它提供了使用命令行配置由NetworkManager管理网络连接的方法。nmcli命令的基本格式为: nmcli [OPTIONS] OBJECT { COMMAND | help } 其中,OBJECT选项可以是gene

    2024年03月21日
    浏览(45)
  • Linux安装软件的三种方式

    Linux安装软件的三种方式分别为: rpm yum在线安装 解压缩 概述:RPM(RedHat Package Manager),RedHat软件包管理工具,类似windows里面的setup.exe,是Linux这系列操作系统里面的打包安装工具,它虽然是RedHat的标志,但理念是通用的。 RPM包的名称格式 Apache-1.3.23-11.i386.rpm “apache” 软件

    2024年02月06日
    浏览(41)
  • [Linux 进程(二)] Linux进程状态

    Linux内核中, 进程状态,就是PCB中的一个字段,是PCB中的一个变量 ,一般是宏定义出的一批数字。 为了弄明白正在运行的进程是什么意思,我们需要知道进程的不同状态。一个进程可以有几个状态(在Linux内核里,进程有时候也叫做任务)。下面是linux内核源码的状态定义。

    2024年02月02日
    浏览(34)
  • linux修改主机名的三种方法

    1.通过比较老的方法vim /etc/hostname 进行编辑修改——重启后生效 2.hostnamectl set-hostname 主机名 ——重启后生效      3.通过内核去修改主机名(红帽8版本) echo 主机名  /proc/sys/kernel/hostname(无法直接编辑文件,利用重定向可以)——立即生效      

    2024年02月11日
    浏览(50)
  • Linux开机自启的三种方式

    1、 在/etc/rc.local文件中添加自启动命令   ​​​​​​​2、 在/etc/init.d目录下添加自启动脚本 Linux开机的时候,会加载运行/etc/init.d目录下的程序,因此我们可以把想要自动运行的脚本放到这个目录下即可。系统服务的启动就是通过这种方式实现的。 PS:添加完后务必设置文

    2024年02月12日
    浏览(33)
  • Linux下控制GPIO的三种方法

    https://blog.csdn.net/qq_41076734/article/details/124669908 1. 应用空间控制gpio 1.1简介 在/sys/class/gpio/下有个export文件,向export文件写入要操作的GPIO号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO输入或者输出模式,而value可控制

    2024年02月03日
    浏览(42)
  • 【Linux】探索Linux进程状态 | 僵尸进程 | 孤儿进程

    最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:Linux入门

    2024年02月05日
    浏览(46)
  • 【Linux笔记】Linux进程概念与进程状态

    进程的概念: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序

    2024年02月06日
    浏览(48)
  • linux修改文件名的三种方法

    我们在使用linux系统过程中为了便于记忆或整理维护,经常需要对文件名进行修改,下面文章介绍了linux系统的三种修改文件名称的方式。 语法:mv [options] source dest 参数说明: 示例:将a.txt修改为a1.txt 语法:cp [options] source dest 参数说明: 示例:将a.txt修改为a1.txt,通过cp命令

    2024年02月02日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包