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

Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识简介top命令是我们经常用来查看系统信息的一个指令,它提供了一个动态的而且是实时的借口帮助我们去查看系统执行时的进程、线程和系统参数的信息 。
top命令输出内容详细剖析首先我们先看一下top命令的输出结果:

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

文章插图
我们现在一一分析这些字段的含义:
第一行
  • 12:53:04表示当前时间 , 也就是当前真实的时间 。
  • up 157 days 13:35,表示这个系统从启动到现在的时间,上图显示的含义就是这个系统从157天13个小时35分钟以前就启动了 。
  • 5 users 表示当前在使用这个机器的用户数量 。
  • load average: 0.00, 0.00, 0.00,这个值表示系统过去1分钟 , 5分钟,15分钟的系统负载 。现在有一个问题就是,什么是这里谈到的系统负载 。所谓系统负载,我们拿一分钟来举例子,我们将一分钟一个CPU时间定义为t , 在这一分钟之内总共消耗的CPU时间为c , 那么在这一分钟之内的负载为\(\frac{c}{t}\) , 需要注意的是这个消耗的CPU时间c是可以大于t的 , 因为一个程序可能使用了多个CPU(并发程序,也可能是多个进程同时在使用不同的CPU) 。
    Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识

    文章插图
比如上面图中的1分钟内的负载大约是10,那么在过去的一分钟之内系统当中各种程序所消耗的CPU时间为\(c = 10.04 \times t\) 。他表示的意思就是在过去的1分钟之内,CPU时间的消耗可以看作大约有10个CPU在满负荷运转 。注意:这里是可以看作是10个CPU在满负荷的运转,其实真实情况可以是在过去的一分钟之内有20个CPU在进行计算,然后每个CPU的计算时间为\(\frac{1}{2}t\),或者其他相同的CPU消耗情况 。
第二行
  • 第二行主要表示当前系统当中任务的相关情况,所谓任务就是当前系统当中一共有多少个进程 。
  • 652 totoal , 这个表示当前系统当中一共有652个进程 。
  • 1 runnung , 表示有一个进程正在执行 。
  • 651 sleeping , 表示有651个进程处于睡眠状态,也就是不需要使用CPU的状态 。
  • 0 stoped,表示有0个进程处于stopped状态 , 这个状态就是被停下来的进程 , 比如说通过ctrl+z让一个进程停下来,你可以通过给这个进程发送一个信号SIGCONT让这个进程恢复执行 , linux当中进程的状态变换如下所示:
    Linux命令系列之top——里面藏着很多鲜为人知的宝藏知识

    文章插图
  • 0 zombie,这个就表示僵尸进程的个数,这里是0个僵尸进程,所谓僵尸进程就是一个进程执行完成了,对于C程序来说你可以理解为你的main函数执行完成了(这个不够准确,其实main函数执行完成之后还会有其他函数需要执行,但是这里你可以大致这么理解),如果这个时候(函数执行完成),这个进程的父进程却没有接受子进程发送给他的信号(子进程在执行完成之后会给父进程发送信号 , 父进程需要通过wait等系统调用去接受这个信号) , 那么子进程就处于zombie状态 , 处于这个状态的进程就需要父进程接受它发送的信号 , 然后子进程的系统资源就可以被回收了,然后子进程会彻底消亡 。
我们现在花一点时间来谈一谈linux当中的进程状态 。