Linux进程stat状态怎么看?linux进程状态详解

在 Linux 中,进程的 状态(State) 是一个非常重要的概念,它描述了进程当前所处的生命周期阶段,这些信息可以通过多种命令查看,最常用的是 pstop/proc/[pid]/stat 文件。

以下是 Linux 进程常见状态的详细解释:

136-linux进程创建-状态查询-僵尸-孤儿-D状态进程详解
加载中
136-linux进程创建-状态查询-僵尸-孤儿-D状态进程详解

常见进程状态符号

ps 命令的输出中,STAT 列或 /proc/[pid]/stat 文件中的第 3 个字段表示进程状态。

核心状态(单字符)

状态符号 全称 含义
R Running 运行中,进程正在 CPU 上运行,或者在运行队列中等待被调度。
S Sleeping 可中断睡眠,进程正在等待某个事件发生(如 I/O 完成、信号、锁等),收到信号后可被唤醒,这是最常见的状态。
D Uninterruptible Sleep 不可中断睡眠,进程正在等待 I/O 操作(通常是磁盘 I/O),此时进程不能被信号中断,即使发送 kill -9 也无法终止,直到 I/O 完成。
T Stopped 已停止,进程被暂停,通常是因为收到了 SIGSTOPSIGTSTP 信号,或者被调试器(如 gdb)跟踪。
Z

Linux进程stat状态怎么看?linux进程状态详解

Zombie

僵尸进程,进程已经终止,但其父进程尚未读取其退出状态(wait()),僵尸进程不占用 CPU 或内存资源,但占用进程号(PID)。
XDead死亡,进程已彻底终止,即将从系统中移除,通常只在极短时间内出现,几乎看不到。

扩展状态(STAT 列中的额外标志)

ps 命令的 STAT 列中,除了第一个字符表示核心状态外,后续字符表示进程的附加状态:

Linux进程stat状态怎么看?linux进程状态详解

标志 含义
< 高优先级(High priority)。
N 低优先级(Low priority)。
s 会话领导者(Session leader),该进程是其会话的第一个进程。
l 多线程(Multi-threaded),该进程是多线程的(使用 clone 系统调用)。
前台进程组(Foreground process group),该进程在前台运行,可以接收终端输入。
I 空闲内核线程(Idle kernel thread),仅在内核线程中出现。
k 内核线程(Kernel thread)。
W 换页(Paging),进程正在换页,通常出现在早期 Linux 内核中。

如何查看进程状态

使用 ps 命令

# 查看所有进程的详细状态
ps aux
# 查看特定 PID 的状态
ps -p <PID> -o pid,stat,comm

示例输出:

  PID STAT COMMAND
 1234 Ss   /sbin/init
 5678 R+   ps aux
 9012 D    java -jar app.jar
  • Ss:可中断睡眠,会话领导者。
  • R+:运行中,前台进程组。
  • D:不可中断睡眠。

使用 top 命令

top 界面中,S 列显示进程状态:

  • R:运行
  • S:睡眠
  • D:不可中断睡眠
  • T:停止
  • Z:僵尸

读取 /proc/[pid]/stat 文件

这是最底层的方式,适用于脚本或程序解析。

cat /proc/<PID>/stat

输出示例:

1234 (bash) S 1233 1234 1234 0 -1 4194304 100 0 0 0 10 5 0 0 20 0 1 0 1234 1234567890 ...
  • 第 1 字段:PID
  • 第 2 字段:进程名(括号内)
  • 第 3 字段:状态(这里是 S

特殊状态详解

🟢 R(Running)

  • 进程正在 CPU 上执行,或正在等待 CPU 调度。
  • 如果很多进程处于 R 状态,可能表示 CPU 负载高。

🔵 S(Sleeping)

  • 大多数用户空间进程处于此状态。
  • 进程在等待事件(如网络数据到达、文件读取完成)。
  • 可被信号中断。

🟠 D(Uninterruptible Sleep)

  • 关键问题:如果大量进程处于 D 状态,通常意味着

    Linux进程stat状态怎么看?linux进程状态详解

    磁盘 I/O 瓶颈存储设备故障

  • kill -9 无效,因为进程在内核态等待 I/O,无法响应信号。
  • 解决方案:检查磁盘健康、I/O 负载,或等待 I/O 完成。

⚫ Z(Zombie)

  • 进程已退出,但父进程未调用 wait() 收集退出状态。
  • 危害:占用 PID 资源,可能导致系统无法创建新进程。
  • 解决方案
    1. 通知父进程处理:kill -SIGCHLD <PPID>
    2. 杀死父进程:kill -9 <PPID>(子进程会被 init 进程收养并清理)

🔴 T(Stopped)

  • 进程被暂停,通常用于调试或后台作业控制。
  • 可通过 kill -CONT <PID> 恢复运行。

常见问题排查

问题:如何查看某个进程的完整状态信息?

# 查看 PID 为 1234 的进程状态cat /proc/1234/status

输出示例:

Name:   bash
State:  S (sleeping)
Tgid:   1234
Pid:    1234
PPid:   1
TracerPid:  0
Uid:    1000    1000    1000    1000
Gid:    1000    1000    1000    1000
FDSize: 64
Groups: 27 30 46 100
VmPeak:   12345 kB
VmSize:   12345 kB
VmRSS:     1234 kB
Threads:  1

问题:如何找出僵尸进程?

ps -eo pid,ppid,stat,comm | grep -w Z

问题:如何找出处于 D 状态的进程?

ps -eo pid,ppid,stat,comm | grep -w D

  • R:正在运行或等待 CPU。
  • S:等待事件(最常见)。
  • D:等待 I/O(需关注磁盘健康)。
  • T:被暂停。
  • Z:僵尸进程(需清理父进程)。

理解进程状态有助于诊断系统性能问题,如 CPU 瓶颈、I/O 瓶颈或资源泄漏。

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/477824.html

(0)
Excel不响应怎么办?Excel卡死无响应的解决方法
上一篇 2026年7月10日 03:12
如何测试cdn,如何检测CDN是否生效
下一篇 2026年7月10日 03:14

相关推荐

  • Linux怎么查看启动项?linux查看开机启动服务命令

    在Linux系统中查看启动项最核心的方法是使用systemctl list-unit-files –type=service命令来筛选启用状态的服务,而排查启动慢或异常则需结合systemd-analyze blame命令分析耗时瓶颈,很多刚接触Linux的管理员在遇到服务器开机慢、服务启动失败或者想清理不必……

    2026年7月4日
    14000
  • Linux内存满了怎么办?Linux系统内存占用过高怎么解决

    Linux内存满并非系统崩溃,而是触发OOM Killer机制强制终止进程,首要解决步骤是立即使用top或free命令定位占用最高的进程并清理缓存或重启服务,当服务器监控面板上红色的内存告警亮起,或者SSH连接突然卡顿甚至断开,大多数运维人员的第一反应往往是恐慌,Linux内核设计之初就有一套成熟的内存管理机制……

    2026年7月8日
    2300
  • linux如何制作补丁?linux打补丁命令详解

    Linux制作补丁的核心在于使用diff命令对比文件差异,并通过patch命令应用补丁,这是开源社区协作和系统维护的标准工作流,在Linux生态中,补丁(Patch)不仅仅是代码的修改记录,它是知识传递、Bug修复和功能迭代的载体,无论是内核开发者提交上游代码,还是系统管理员修复特定发行版的漏洞,掌握补丁的制作……

    2026年7月6日
    18600
  • linux参数大全有哪些?linux系统常用参数详解

    Linux参数配置的核心在于理解内核、文件系统与进程管理的底层逻辑,通过精准调整sysctl、ulimit及mount选项,可显著提升系统稳定性与I/O性能,而非盲目套用通用模板,在服务器运维和开发环境中,Linux参数调整往往被视为“黑魔法”,但实际上它是一套严密的系统对话机制,许多初学者在面对海量参数时容易……

    2026年7月9日
    11900
  • linux rename函数怎么用,linux下批量修改文件名的命令

    在Linux系统中,rename函数是执行文件或目录重命名及移动操作的核心工具,它通过原子性操作确保数据一致性,比传统的mv命令在脚本编写中更具优势,很多开发者在Linux环境下处理文件时,习惯性地使用mv命令,但在编写自动化脚本或处理高并发文件操作时,往往会遇到一些隐蔽的陷阱,rename系统调用(对应C语言……

    2026年7月9日
    2800
  • Linux Socket连接断开怎么办?如何排查网络异常

    Linux Socket断开通常由对端发送FIN包、网络中断、超时未心跳或进程异常退出触发,排查需结合ss -t查看状态、dmesg查内核日志及应用层错误码,在网络通信中,Socket连接就像两条城市间的电话线,当一方挂断或线路被剪断,连接就会终止,对于开发者而言,理解这一过程并非为了背诵RFC文档,而是为了在……

    2026年7月5日
    14100
  • Linux Nginx状态怎么查?nginx查看服务状态命令

    查看Nginx状态的核心在于通过访问nginx_status模块接口或使用systemctl status nginx命令,前者提供详细的实时流量与连接数数据,后者仅展示服务进程的生命周期状态,二者结合使用才能全面掌握服务器健康状况,在2026年的运维环境中,Nginx依然是绝大多数Web服务器和反向代理的首选……

    2026年7月4日
    14800
  • Linux PHP Sendmail发信失败怎么办?php sendmail配置教程

    在 Linux 系统中配置 PHP 使用 sendmail 发送邮件,通常涉及以下几个步骤:安装并配置 Sendmail(或替代服务如 Postfix)配置 PHP 的 php.ini测试邮件发送功能安装和配置邮件传输代理(MTA)安装 Sendmail(可选)sudo apt install sendmail……

    2026年7月9日
    12000
  • Linux整数比较怎么做?shell脚本中整数比较符号有哪些

    在Linux系统中,整数比较主要依赖test命令、[ ]方括号或[[ ]]双括号结构,核心区别在于前者是POSIX标准命令,后者是Bash内置扩展,推荐使用[[ ]]以获得更安全的语法支持,很多刚接触Linux的新手朋友,在编写Shell脚本时,最容易踩坑的地方就是整数比较,你可能遇到过明明数字大小关系没错,脚……

    2026年7月7日
    8800
  • Linux连接不了怎么办?Linux连接不上的解决方法

    Linux连接不上的核心原因通常集中在网络配置错误、SSH服务未启动、防火墙拦截或密钥认证失败,请优先检查网络连通性与服务状态,当你在终端输入命令却看到“Connection refused”或“Connection timed out”时,这种挫败感是每位运维人员都经历过的,别急着重装系统,大多数情况下,这只……

    2026年7月5日
    13100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注