linux 进程状态学习

文章目录

    • 一、进程状态及其含义
      • 1.1、9种状态
      • 1.2、6种状态
      • 1.3、两种方式关系

在 Linux 系统中,进程状态是指操作系统中每个进程在其生命周期中的当前状态。了解这些状态有助于系统管理员和开发人员监控和优化系统性能。

一、进程状态及其含义

目前进程状态分为2种,一种是9种状态,一种是6种状态

1.1、9种状态

  • 新建(New):
    • 描述:进程正在被创建但尚未准备好运行。
    • 特征:这通常是一个短暂的状态,进程快速进入就绪状态。
  • 就绪(Ready):
    • 描述:进程已准备好运行,等待被调度到 CPU 上执行。
  • 运行(Running, R):
    • 描述:进程正在 CPU 上执行,或者准备执行(在就绪队列中等待)。
    • 特征:进程在 CPU 时间片内执行,或者在调度器选择下一个要运行的进程时被选中。
  • 等待(Waiting)
    • 描述:进程因等待某些资源或事件(如I/O操作完成、信号量、锁等)而暂时无法继续执行。
    • 原因:
      • 等待用户输入。
      • 等待磁盘I/O操作完成。
      • 等待其他进程释放资源(如锁或信号量)。
    • 特点:
      • 进程不会占用CPU资源。
      • 当等待的事件发生后,进程会转为就绪状态。
  • 睡眠(Sleeping, S):
    • 描述:进程正在等待某个事件(如 I/O 操作)完成。
    • 特征:分为可中断睡眠(可以通过信号唤醒)和不可中断睡眠(通常等待硬件事件,不能被信号打断)。
  • 挂起(Suspended):
    • 描述:进程被挂起,通常是为了节省内存资源。
    • 特征:进程被移出内存,状态信息保存在磁盘上。
  • 停止(Stopped, T):
    • 描述:进程已被停止,通常是由于接收到停止信号(如 SIGSTOP),或者正在被调试。
    • 特征:进程不再执行,直到接收到继续信号(如 SIGCONT)。
  • 僵尸(Zombie, Z):
    • 描述:进程已终止,但其父进程尚未读取其退出状态。进程资源已释放,但进程表项仍然存在。
    • 特征:需要父进程调用 wait 系列函数来读取其退出状态并从进程表中移除。
  • 死亡(Terminated):
    • 描述:进程已完成执行或因错误被终止。
    • 特征:进程表中不再存在,所有资源已被回收。

1.2、6种状态

  • R (Running or Runnable)

    • 描述:进程正在运行或处于可运行状态。
    • 具体含义:
      • 进程正在 CPU 上执行。
      • 进程在就绪队列中,等待 CPU 调度。
    • 特点:
      • 进程正在使用 CPU 或准备使用 CPU。
      • 这是进程的活跃状态。
  • S (Interruptible Sleep)

    • 描述:进程处于可中断的睡眠状态。
    • 具体含义:
      • 进程在等待某些事件(如 I/O 操作完成、信号等)。
      • 可以被信号中断并唤醒。
    • 特点:
      • 进程不占用 CPU 资源。
      • 当等待的事件发生或收到信号时,进程会转为 R 状态。
  • D (Uninterruptible Sleep)

    • 描述:进程处于不可中断的睡眠状态。
    • 具体含义:
      • 进程正在等待某些内核操作完成(如磁盘 I/O)。
      • 不能被信号中断。
    • 特点:
      • 进程不占用 CPU 资源。
      • 这种状态通常持续时间较短,但如果硬件出现问题,进程可能会长时间卡在此状态。
      • 无法通过 kill 命令终止。
  • T (Stopped)

    • 描述:进程被暂停(挂起)。
    • 具体含义:
      • 进程被信号(如 SIGSTOP)暂停。
      • 可以通过信号(如 SIGCONT)恢复运行。
    • 特点:
      • 进程不占用 CPU 资源。
      • 常见于调试场景或用户手动暂停进程。
  • X (Dead)

    • 描述:进程已经终止,等待父进程回收。
    • 具体含义:
      • 进程执行完毕或被强制终止。
      • 进程的资源尚未被完全回收。
    • 特点:
      • 进程不占用 CPU 资源。
      • 这是一个瞬时状态,通常很难观察到。
  • Z (Zombie)

    • 描述:进程处于僵尸状态。
    • 具体含义:
      • 进程已经终止,但其退出状态尚未被父进程读取(通过 wait() 系统调用)。
      • 进程描述符仍然保留在系统中。
    • 特点:
      • 进程不占用 CPU 资源。
      • 僵尸进程无法被 kill 命令终止。
      • 如果父进程未正确处理,僵尸进程可能会一直存在,导致资源泄漏。
状态名称描述
RRunning or Runnable进程正在运行或可运行。
SInterruptible Sleep进程在等待事件,可被信号中断。
DUninterruptible Sleep进程在等待内核操作,不可被信号中断。
TStopped进程被暂停(挂起)。
XDead进程已终止,等待回收。

1.3、两种方式关系

状态含义对应状态
R (Running)进程正在运行或者在运行队列中等待运行(Running)和就绪(Ready)
S (Sleeping)进程正在等待某个事件(如 I/O 操作)完成。通常是短期等待阻塞(Blocked)或等待(Waiting)
D (Uninterruptible Sleep)进程在等待无法中断的事件,通常是等待 I/O 操作完成。进程不能被信号唤醒类似于挂起(Suspended),但更加具体化为不可中断的等待
T (Stopped/Traced)进程已停止,通常是由于接收到停止信号(如 SIGSTOP)或者正在被调试停止(Stopped)
X (Dead)进程已经终止,通常不会在正常的进程列表中看到这个状态,因为它已经被回收死亡(Terminated)
Z (Zombie)进程已经终止,但其父进程尚未读取其退出状态。进程仍然在进程表中,直到父进程处理其终止状态特殊的死亡状态(Terminated),需要父进程调用 wait 系列函数处理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言标准库函数】指数与对数函数:exp(), log(), log10()

目录 一、头文件 二、函数简介 2.1. exp(double x) 2.2. log(double x) 2.3. log10(double x) 三、函数实现(概念性) 3.1. exp(double x) 的模拟实现 3.2. log(double x) 和 log10(double x) 的模拟实现 四、注意事项 4.1. exp(double x) 的注…

CSS Overflow 属性详解:控制内容溢出的利器

在前端开发中,处理内容溢出是一个常见的需求。CSS 提供了 overflow 属性,帮助我们控制当内容超出元素框时的显示方式。本文将详细介绍 overflow 属性的各种取值及其应用场景。 1. 什么是 overflow 属性? overflow 属性用于控制当元素的内容…

go语言中的接口

接口简介 现实生活中的接口 现实生活中手机、相机、U 盘都可以和电脑的 USB 接口建立连接。我们不需要关注 usb 卡槽大小是否一样,因为所有的 USB 接口都是按照统一的标准来设计的。 Golang 中的接口(interface) Golang 中的接口是一种抽象…

网络安全威胁框架与入侵分析模型概述

引言 “网络安全攻防的本质是人与人之间的对抗,每一次入侵背后都有一个实体(个人或组织)”。这一经典观点概括了网络攻防的深层本质。无论是APT(高级持续性威胁)攻击、零日漏洞利用,还是简单的钓鱼攻击&am…

Redis企业开发实战(三)——点评项目之优惠券秒杀

目录 一、全局唯一ID (一)概述 (二)全局ID生成器 (三)全局唯一ID生成策略 1. UUID (Universally Unique Identifier) 2. 雪花算法(Snowflake) 3. 数据库自增 4. Redis INCR/INCRBY 5.总结 (四)Redis实现全局唯一ID 1.工具类 2.测试类 3…

Verilog代码实例

Verilog语言学习! 文章目录 目录 文章目录 前言 一、基本逻辑门代码设计和仿真 1.1 反相器 1.2 与非门 1.3 四位与非门 二、组合逻辑代码设计和仿真 2.1 二选一逻辑 2.2 case语句实现多路选择逻辑 2.3 补码转换 2.4 7段数码管译码器 三、时序逻辑代码设计和仿真 3.1…

排序算法--基数排序

核心思想是按位排序(低位到高位)。适用于定长的整数或字符串,如例如:手机号、身份证号排序。按数据的每一位从低位到高位(或相反)依次排序,每次排序使用稳定的算法(如计数排序&#…

图形化界面MySQL(MySQL)(超级详细)

目录 1.官网地址 1.1在Linux直接点击NO thanks…? 1.2任何远端登录,再把jj数据库给授权 1.3建立新用户 优点和好处 示例代码(MySQL Workbench) 示例代码(phpMyAdmin) 总结 图形化界面 MySQL 工具大全及其功能…

C++ 使用CURL开源库实现Http/Https的get/post请求进行字串和文件传输

CURL开源库介绍 CURL 是一个功能强大的开源库,用于在各种平台上进行网络数据传输。它支持众多的网络协议,像 HTTP、HTTPS、FTP、SMTP 等,能让开发者方便地在程序里实现与远程服务器的通信。 CURL 可以在 Windows、Linux、macOS 等多种操作系…

mapbox进阶,添加绘图扩展插件,绘制圆形

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️MapboxDraw 绘图控件二、🍀添加绘图扩…

网络工程师 (24)数据封装与解封装

一、数据封装 数据封装是指将协议数据单元(PDU)封装在一组协议头和尾中的过程。在OSI 7层参考模型中,数据从应用层开始,逐层向下封装,直到物理层。每一层都会为其PDU添加相应的协议头和尾,以包含必要的通信…

OSPF基础(3):区域划分

OSPF的区域划分 1、区域产生背景 路由器在同一个区域中泛洪LSA。为了确保每台路由器都拥有对网络拓扑的一致认知,LSDB需要在区域内进行同步。OSPF域如果仅有一个区域,随着网络规模越来越大,OSPF路由器的数量越来越多,这将导致诸…

C++----继承

一、继承的基本概念 本质:代码复用类关系建模(是多态的基础) class Person { /*...*/ }; class Student : public Person { /*...*/ }; // public继承 派生类继承基类成员(数据方法),可以通过监视窗口检…

【DeepSeek】DeepSeek小模型蒸馏与本地部署深度解析DeepSeek小模型蒸馏与本地部署深度解析

一、引言与背景 在人工智能领域,大型语言模型(LLM)如DeepSeek以其卓越的自然语言理解和生成能力,推动了众多应用场景的发展。然而,大型模型的高昂计算和存储成本,以及潜在的数据隐私风险,限制了…

ZZNUOJ(C/C++)基础练习1081——1090(详解版)

目录 1081 : n个数求和 (多实例测试) C C 1082 : 敲7(多实例测试) C C 1083 : 数值统计(多实例测试) C C 1084 : 计算两点间的距离(多实例测试) C C 1085 : 求奇数的乘积(多实例测试…

axios 发起 post请求 json 需要传入数据格式

• 1. axios 发起 post请求 json 传入数据格式 • 2. axios get请求 1. axios 发起 post请求 json 传入数据格式 使用 axios 发起 POST 请求并以 JSON 格式传递数据是前端开发中常见的操作。 下面是一个简单的示例,展示如何使用 axios 向服务器发送包含 JSON 数…

硬盘接入电脑提示格式化?是什么原因?怎么解决?

有时候,当你将硬盘接入电脑时,看到系统弹出“使用驱动器中的光盘之前需要将其格式化”的提示,肯定会感到十分困惑和焦虑。这种情况不仅让人担心数据丢失,也可能影响正常使用。为什么硬盘会突然要求格式化?是硬盘出了问…

使用Python实现PDF与SVG相互转换

目录 使用工具 使用Python将SVG转换为PDF 使用Python将SVG添加到现有PDF中 使用Python将PDF转换为SVG 使用Python将PDF的特定页面转换为SVG SVG(可缩放矢量图形)和PDF(便携式文档格式)是两种常见且广泛使用的文件格式。SVG是…

【大数据技术】搭建完全分布式高可用大数据集群(Kafka)

搭建完全分布式高可用大数据集群(Kafka) kafka_2.13-3.9.0.tgz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群 Kafka 的详细步骤。 注意: 统一约定将软件安装包存放于虚拟机的/software目录下,软件安装至/opt目录下。 安…

【C++篇】C++11新特性总结1

目录 1,C11的发展历史 2,列表初始化 2.1C98传统的{} 2.2,C11中的{} 2.3,C11中的std::initializer_list 3,右值引用和移动语义 3.1,左值和右值 3.2,左值引用和右值引用 3.3,…