zoukankan      html  css  js  c++  java
  • linux进程状态

    系统维护的时候难免会遇到进程的状态的查询和管理,到底什么是R,有的是S,有的还是S+呢?一直有些混沌的问题,今天细细的来总结一下:
        ps是用来报告系统中程序执行状况的命令这个是无可厚非的,linux进程的状态:
    D    不可中断睡眠 (通常是在IO操作) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生
    R   正在运行或可运行(在运行队列排队中)
    S   可中断睡眠 (休眠中, 受阻, 在等待某个条件的形成或接受到信号)
    T   已停止的 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行
    W   正在换页(2.6.内核之前有效)
     X   死进程 (未开启)
     Z   僵尸进程  进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放BSD风格的
     <   高优先级(not nice to other users)
     N   低优先级(nice to other users)
     L   页面锁定在内存(实时和定制的IO)
     s   一个信息头
     l   多线程(使用 CLONE_THREAD,像NPTL的pthreads的那样)
     +   在前台进程组



    ◆运行状态(TASK_RUNNING)
    当进程正在被CPU执行,或已经准备就绪随时可由调度程序执行,则称该进程为处于运行状态(running)。进程可以在内核态运行,也可以在用户态运行。当系统资源已经可用时,进程就被唤醒而进入准备运行状态,该状态称为就绪态。这些状态(图中中间一列)在内核中表示方法相同,都被成为处于TASK_RUNNING状态。
    ◆可中断睡眠状态(TASK_INTERRUPTIBLE)
    当进程处于可中断等待状态时,系统不会调度该进程执行。当系统产生一个中断或者释放了进程正在等待的资源,或者进程收到一个信号,都可以唤醒进程转换到就绪状态(运行状态)。
    ◆不可中断睡眠状态(TASK_UNINTERRUPTIBLE)
    与可中断睡眠状态类似。但处于该状态的进程只有被使用wake_up()函数明确唤醒时才能转换到可运行的就绪状态。
    ◆暂停状态(TASK_STOPPED)
    当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。在Linux 0.11中,还未实现对该状态的转换处理。处于该状态的进程将被作为进程终止来处理。
    ◆僵死状态(TASK_ZOMBIE)
    当进程已停止运行,但其父进程还没有询问其状态时,则称该进程处于僵死状态。
    当一个进程的运行时间片用完,系统就会使用调度程序强制切换到其它的进程去执行。另外,如果进程在内核态执行时需要等待系统的某个资源,此时该进程就会调用sleep_on()或sleep_on_interruptible()自愿地放弃CPU的使用权,而让调度程序去执行其它进程。进程则进入睡眠状态(TASK_UNINTERRUPTIBLE或TASK_INTERRUPTIBLE)。
    只有当进程从“内核运行态”转移到“睡眠状态”时,内核才会进行进程切换操作。在内核态下运行的进程不能被其它进程抢占,而且一个进程不能改变另一个进程的状态。为了避免进程切换时造成内核数据错误,内核在执行临界区代码时会禁止一切中断。

  • 相关阅读:
    每日一练leetcode
    每日一练leetcode
    每日一练 leetcode
    每日一练leetcode
    每日一练leetcode
    leetcode每日一练
    BigDecimal类 定义及用法
    每日一练leetcode
    每日一练leetcode
    字符串表达式校验&求值(C#实现) 附代码
  • 原文地址:https://www.cnblogs.com/zlingh/p/4409002.html
Copyright © 2011-2022 走看看