Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识( 二 )


我们现在花一点时间来谈一谈linux当中的进程状态 。

  • Ready , 当进程被创建完成之后他就处于Ready状态 , 在这个状态下的进程只差CPU了 , 也就是说 , 他现在只需要被操作系统调度获取CPU然后他就可以执行了 。
  • Running , 当进程从Ready状态获取CPU的执行权的时候 , 进程就处于Running状态 , 这个状态表示进程正在执行 。
  • traced , 这个状态主要是一个进程处于调试状态 , 这个状态需要调试的进程给这个被调试的进程发送信号 , 然后和这个进程才可以继续执行 。
  • Zombie , 当进程执行完成之后 , 父进程接受子进程发送的信号之前 , 进程就处于这个状态 。
  • Suspended , 这个状态表示进程被挂起 , 当进程请求IO的时候 , 需要阻塞等待IO请求完成 , 这个时候的进程状态就是Suspened状态 。
第三行这一行主要是各种时间所占的百分比的统计 , 这个数据的统计时间区间是 , 从本次刷新到上一次刷新之间 , 实在这个区间统计的数据
  • us , 运行没有指定优先级的用户进程所消耗的CPU时间所占百分比 , 默认的终端执行的程序都是没有指定优先级的 , 我们可以使用nice这个命令来改变程序执行的优先级:sudo nice -n -10 ./time
  • sy , 运行内核进程所消耗的CPU时间所占的百分比 。
  • ni , 运行指定了修改过优先级之后的用户进程所占的CPU时间百分比 。这里可以结合PR和NI两个字段进行分析 , 我们现在执行sudo nice -n 10 ./a.out命令 , 在./a.out当中我启动了10个死循环的线程 , 我们来看一下它的top输出结果:
    Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识

    文章插图
从上面的结果来看我们通过nice命令修改来进程优先级 , 但是需要主要的是一个进程的PR值越大他的优先级越低 , NI值越大优先级越低 , 也就是说我们上面实际上是降低了进程执行的优先级了 , 但是我们可以看到ni的值是发生变化了的 , 这也印证了上面我们所谈到的ni值发生变化的过程 。我们再来看一下没有设置优先级的结果 , 直接执行sudo ./a.out
Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识

文章插图
但是在实验测试的过程当中发现了一个奇怪的问题 , 但我们提升进程的优先级(提升优先级需要管理员权限)的时候ni的值没有发生变化 , 因此上面所谈到的ni的变化应该只适用于普通用户的进程(因为降低优先级不需要管理员权限) 。
Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识

文章插图