Linux 进程状态

以下取自ps命令的man page,然后加上了我自己的理解。

PROCESS STATE CODES
       Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process:

               D    uninterruptible sleep (usually IO): 当进程处于等待硬件IO时,处于这种状态。如果系统同时有大量进程处于D状态,且长时间不发生变化,那很有可能是出现了IO瓶颈,可以用IO相关的命令进一步查看。还有一种情况,我曾经遇到过的是主机通过NFS访问存储server,由于存储server出了性能问题,也会导致需要访问NFS文件系统的进程处于D状态,用top命令,应该能看到CPU的%wa会非常高。

               R    running or runnable (on run queue):正在运行或者正在等待被调度

               S    interruptible sleep (waiting for an event to complete): 可中断状态。据统计,绝大多数进程多数时间是处于这种状态,而不是我们以为的RUNNING状态。进程处于这种状态是理想的、健康的。比如我们的网络服务段程序的代码在调用accept()函数获取客户端的连接,而此时客户端没有新的连接进来,或者调用read()函数从已建立的socket 连接中读取数据,但是socket中还没有任何传过来的数据,此时进程都会处于S状态;再比如程序调用sleep函数,或者一个线程正在等另外一个线程持有的一个锁,也会处于这种可中断状态。(线程从Linux操作系统的角度看,也是一个进程哦,他叫light weight process)
               T    stopped by job control signal:这里说是stopped状态,实际上进程处于暂停或者挂起状态。比如在我们SSH终端运行一个ping命令,这时我们按住ctrl + z,这时就会发送一个SIGSTOP信号给在正在当前终端frontend运行的ping进程,然后操作系统收到该信号时,就会将该ping进程挂起,后边我们用"fg %1" 或者"bg %1"命令(1是job id,假设我们的ping命令job id是1),就会恢复ping进程的运行,当然你也可以通过kill命令,发送一个SIGCONT信号给ping进程,也能恢复他的运行。也许用suspended 替代stopped来描述处于暂停、挂起状态的进程也许更合适一些,毕竟英文stopped和terminated,dead翻译过来都可以叫‘终止’,都差不多意思,容易混淆。
               t    stopped by debugger during the tracing: 也是挂起状态,只不过进程挂起是由一些debug工具,比如gdb导致的,恢复运行,也不能通过发送SIGCONT信号,只能由debug工具来恢复运行。
               W    paging (not valid since the 2.6.xx kernel)
               X    dead (should never be seen)
               Z    defunct ("zombie") process, terminated but not reaped by its parent:这是所谓的僵尸进程。在子进程退出后,会释放所有资源除了task_struct,task_struct是内核为每个进程、线程分配的一个数据结构,也叫PCB、进程控制块、进程描述符等,不同类型的操作系统有不同的叫法。因为进程退出后,会返回一个退出状态给父进程,这个状态就保存在子进程的task_struct中。当子进程退出后,如果父进程不去处理子进程的返回信息,或者干脆父进程也退出了,那这些已经完成运行、等待父进程处理的子进程,就成了僵尸进程。僵尸进程一般不需要我们手工做特殊处理,因为操作系统的init进程(用户空间的第一个进程)会最终处理这些僵尸进程。说一个体外话,我们在SSH中断的shell命令提示符下,输入$?命令,可以获取上一个命令的返回结果,这个结果实际上就是shell在执行上一个命令时,shell为该命令创建了一个子进程,shell作为父进程。当命令运行结束后,shell作为父进程会从上一个命令的task_struct中获取到了该返回值,并保存在"$?"中。

              另外我们在redhat/centos等Linux系统中,用ps、top命令查看进程状态时,除了上边列出的状态,我们有可能还会看到下边的状态,以下是这些状态的解释,可以不用做太多关注,重点关注上边的这些状态。       

For BSD formats and when the stat keyword is used, additional characters may be displayed:

               <    high-priority (not nice to other users)
               N    low-priority (nice to other users)
               L    has pages locked into memory (for real-time and custom IO)
               s    is a session leader
               l    is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
               +    is in the foreground process group


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值