Linux进程状态

本文详细介绍了Linux进程的七种状态:运行、睡眠、磁盘休眠、停止、死亡、僵死和僵尸进程,以及各状态的特点和转换,强调了不可中断睡眠状态D的特殊性和僵尸进程对系统资源的影响。通过进程状态,可以更好地理解和调试Linux系统中的进程行为。
摘要由CSDN通过智能技术生成

1.进程状态

状态在Kernel源码中的定义:

static const char * const task_state_array[] = {
   
    "R (running)", 
    "S (sleeping)", 
    "D (disk sleep)", 
    "T (stopped)", 
    "t (tracing stop)", 
    "X (dead)", 
    "Z (zombie)", 
};
  • R-- 运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
  • S-- 睡眠状态(sleeping): 意味着进程在等待事件完成(也叫做可中断睡眠)
  • D-- 磁盘休眠状态(Disk sleep)也叫不可中断睡眠状态,在这个状态的进程通常会等待IO的结束
  • T-- 停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行
  • X-- 死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态
  • Z-- 僵尸状态 (zombie) : 已经死亡的进程, 依然占着某些资源

可以通过ps aux / ps axj 命令查看进程状态
在这里插入图片描述

2.运行状态R

只有该状态下的进程才有可能在CPU中执行,为什么说是可能呢?因为在Linux下,正在运行和就绪(在运行队列中, 要拿到时间片才能运行)的进程都视作运行状态。Linux 下 R 状态的进程的task_struct结构 (PCB) 被放入对应的CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。

进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上行。

3.睡眠状态S(可中断睡眠)

处于这个状态的进程因为等待某个事件的发生,比如wait()阻塞,而被挂起。 这些进程的task_struct被放入对应事件的等待队列中。当等待的事件发生时(由外部中断触发、或由其他进程触发),对应等待队列中的这个睡眠状态的进程被唤醒。通过ps命令我们会看到,一般情况下,进程列表中的绝大多数进程都处于S 状态。

如下代码:子进程由于sleep进入S状态,父进程由于wait阻塞等待子进程退出,也处于S状态。

#include<stdio.h>
#include<unistd.h>
#include<sys/wait.h>
int main(){
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值