首页 > 系统相关 >Linux进程概念-进程状态

Linux进程概念-进程状态

时间:2025-01-17 12:28:06浏览次数:3  
标签:状态 队列 链表 概念 Linux 进程 OS

在上一篇已经了解了在进程中的基本概念,现在我来了解一下进程的相关状态;

对于进程的状态,在详细了解之前我们可以来一个粗略的理解:进程的状态可以理解为就是一个整数,用宏定义 实现R, S等状态;也就是进程状态就是take_struck内的一个整数;

如果不理解也没关系,下面来看看对进程状态的看法:

先理解最基本的三个状态运行&&阻塞&&挂起

运行&&阻塞&&挂起

每一个cpu中都有一个 调度队列(Linux中叫做runqueue)的东西;

之前的文章就提到过,找到PCB就能找到对应的代码和数据,而调度队列本就是专门文CPU设计的一个队列;PCB既属于全局链表也属于调度队列;至于原因在Linux内核链表详细说明;

  • 运行:只要进程在调度队列中,进程的状态就是running;        
  • 阻塞:等待某种设备或者资源就绪(如键盘,显示器,网卡,磁盘,摄像头,话筒……)

最常见的阻塞的例子,C语言的scanf  在输入是就是阻塞,等待键盘输入;

当然OS要管理系统中的各种硬件资源还是要先管理,后组织的;

因此OS中也存在 设备队列

假设运行队列的一个进程,想要键盘输入,但是键盘正在被调度,这个进程就会被连入设备队列的键盘对应的 device 的等待指针(wait queue)中。当键盘有空时,OS 先改变其 state 等……一系列状态,再找其等待队列指针中是否有等待的进程,有,则再把进程取消链接,链入到原来的进程中;

总之:

运行到阻塞其实:就是把 PCB(进程) 连入到了不同的队列结构当中;
从阻塞到运行;其实就是把找到 PCB,在把 PCB 连回到原来的队列中。(这和面试那个例子很像)

  • 阻塞挂起:当内存吃紧时,正处于阻塞状态的进程的代码和数据被 唤出 到磁盘的特定地方处于这个状态的进程 就是 阻塞挂起。(这个特定的地方可以称为 swap交换分区)

当某个进程等待的设备已经有空进行这个进程时,肯定也是 OS 先知道的;OS 就先会把磁盘的特定地方的对应的代码和数据唤入到对应的进程中;再把 进程状态变为 running
当内存相当吃紧时;汇报 运行队列中的进程的代码和数据唤出到 swap 交换分区,这一过程为运行挂起;(因此挂起这一操作,在很多地方的能进行);

理解内核链表

我们知道Linux的内核链表是双链表,但是是传统的双链表吗?

 

其实Linux的内核链表不是传统的双链表

Linux 中 next prev 指向的不是一个一个节点,而是一个(节点)进程内部的 links进程

Linux就是用这种结构用一个进程 实现了各种队列(如运行队列,设备队列)

也是就 list_head 存储 struc task 的各种不同类型的信息。(设备链表,进程链表,软件链表等等一类的)

 Linux的进程状态

 

下面是比较官方的定义: 

  • R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
  • S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
  • D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的进程通常会等待IO的结束。
  • T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停进程可以通过发送 SIGCONT 信号让进程继续运行。
  • X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。

指令查看

每过一秒查看这个进程 

R状态

 为什么./myprocess 没有R状态? 主要原因就是R状态就在打印的那一瞬间,时间很短,运气好多才能查看到R状态 ;   

printf()运行 IO 状态很短,很难察觉到

T状态

 为什么叫断点?因为进程被暂停了
不是被追踪而暂停的,而是用户 ctrl z 让其暂停的;

那么作用是什么呢:一般是用于止损的,比如一个软件不让你评论但是评论了,OS 就会把这个进程暂停;再由用户决定是否删除这个进程;

S状态与D状态 

OS中的阻塞状态,在Linux中就是S,把Linux的睡眠状态就是OS中的阻塞状态;

S可以认为是浅睡眠,是可以被杀掉的;而D是深度睡眠,不能被中断;

 那为什么要有这个区分呢:

在磁盘完成写入 100MB 的内容之前,进程会在外面等待磁盘完成(此时是 S 状态,浅睡眠)OS 在内存极度紧张的时候,已经把该挂起的挂起了;此时就会把这个浅睡眠状态的进程杀掉;以防重要的进程被当做浅睡眠杀掉,就有了 D 状态;因此 D 状态也是阻塞的一种;

(补充:OS 如果内容真完全不够使用了,OS 就不会进行 OI 操作;操作系统就会崩溃)

 X状态

这个状态只是一个返回状态,你不会在任务列表里看到这个状态

补充:为什么ctrl z/ v 能杀掉进程?

因为发送了信号,这是底层原因;

(比如kill -9就是杀掉信号)

标签:状态,队列,链表,概念,Linux,进程,OS
From: https://blog.csdn.net/2302_80253411/article/details/145035711

相关文章

  • Linux内存泄露案例分析和内存管理分享
    作者:京东科技李遵举一、问题近期我们运维同事接到线上LB(负载均衡)服务内存报警,运维同事反馈说LB集群有部分机器的内存使用率超过80%,有的甚至超过90%,而且内存使用率还再不停的增长。接到内存报警的消息,让整个团队都比较紧张,我们团队负责的LB服务是零售、物流、科技等业务服务的流......
  • 工作中用到的linux的命令
    常用的命令汇总创建后台进程ping本机地址使用以下命令在后台执行ping本机地址:ping127.0.0.1&查找创建的后台进程并强制杀掉查看当前进程并杀掉指定的后台进程,可以使用以下命令:psaux|grepping#查找ping进程kill-9<PID>#使用进程ID强制......
  • Linux 找到占用磁盘最多的文件或目录,可以使用du和sort
    想要找到占用磁盘最多的文件或目录,可以使用du和sort命令: du-h/path/to/directory|sort-rh|head-n10其中:du-h/path/to/directory用于计算指定目录下的所有文件和子目录的大小,并以人类可读的格式显示。sort-rh用于按磁盘使用情况的大小(逆序)对输出进行排序。h......
  • Linux小知识
    linux命令使用方法,在网页中搜索命令用Ctrl+F查看命令用法可以在命令后加-h或--help,或者用man<command>查看详细用法常用命令nohup不挂断地执行命令烦恼于晚上跑的任务因为网络波动或是电脑自动重启挂了?用它就对了!nohup<command>[>logfile][2>&1][&]最常用的方......
  • Linux系统中 ping 的平均时间
    使用ping命令可以测试网络连接的质量,包括延迟和丢包率。在Linux系统中,计算ping命令的耗时可以通过以下方法进行:ping-c5域名|grep'rttmin/avg/max/mdev'|awk-F'[/]''{print$8,$NF}'ping-c5域名:向域名发送5次ICMP请求包(-c5表示发送5个包)。g......
  • 【Linux性能】如何在 Linux 中优雅地让 HTTP 请求超时?
    在Linux系统中,优化HTTP请求的性能和可靠性是每个系统管理员和开发者的必备技能之一。特别是当你在处理大量HTTP请求时,合理设置超时可以有效防止资源被长时间占用、提高系统性能,并避免潜在的安全风险。本篇文章将带你深入探讨如何在Linux中设置HTTP请求超时,逐步揭示各种......
  • 消息中间件的基础概念入门
    目录一、什么是消息中间件1.1、简介1.2、消息中间件的主要作用解耦合异步通信负载均衡可靠性与持久性消息路由与调度削峰事务支持监控与审计跨平台和跨语言支持二、常用消息中间件对比2.1、 RabbitMQ2.1.1、特点2.1.2、适用场景2.2、ApacheKafka2.2.1、特......
  • Ubuntu等各类Linux系统安装配置Docker详细教程(全网最详细,步骤简洁,看完包懂)
    文章目录前言详细步骤1.安装相关依赖2.安装阿里云的DockerGPG密钥3.设置stable仓库4.安装Docker5.启动服务6.验证测试常见问题及对应解决方案Ubuntu22.04配置Docker-速通版前言Docker是一个非常常用的工具,但是由于其涉及到的知识点较多,所以网上的教程大部分非......
  • 【c++】【Linux】内存碎片
    【c++】【Linux】内存碎片内碎片分配给进程未被使用的部分当内存被分配给某个进程时,分配的内存块可能比实际需求稍大,未被使用的部分称为内碎片。例如,如果需要3.6k内存此时根据buddy伙伴系统内存分配方式最少分配4k为一页那其中0.4k未被使用的内存就是内碎片如果使......
  • Linux基础03:用户相关操作 + 用户组相关操作 + 权限管理
    主要内容用户相关操作用户组相关操作权限管理用户和用户组基础1.计算机通过用户名和密码识别用户。2.Linux中新建用户后,需要设置密码。3.系统有一个特殊的用户root,这个被称为超级用户,一般会默认。4.用户组:把几个用户归在一起,这样的组被称之为用户组,规定文件所属用户组......