共计 4492 个字符,预计需要花费 12 分钟才能阅读完成。
导读 | top 命令是我们经常用来查看系统信息的一个指令,它提供了一个动态的而且是实时的借口帮助我们去查看系统执行时的进程、线程和系统参数的信息。 |
首先我们先看一下 top 命令的输出结果:
我们现在一一分析这些字段的含义:
,需要注意的是这个消耗的 CPU 时间 c 是可以大于 t 的,因为一个程序可能使用了多个 CPU(并发程序,也可能是多个进程同时在使用不同的 CPU)。
我们现在花一点时间来谈一谈 linux 当中的进程状态。
这一行主要是各种时间所占的百分比的统计,这个数据的统计时间区间是,从本次刷新到上一次刷新之间,实在这个区间统计的数据
从上面的结果来看我们通过 nice 命令修改来进程优先级,但是需要主要的是一个进程的 PR 值越大他的优先级越低,NI 值越大优先级越低,也就是说我们上面实际上是降低了进程执行的优先级了,但是我们可以看到 ni 的值是发生变化了的,这也印证了上面我们所谈到的 ni 值发生变化的过程。我们再来看一下没有设置优先级的结果,直接执行 sudo ./a.out:
但是在实验测试的过程当中发现了一个奇怪的问题,但我们提升进程的优先级(提升优先级需要管理员权限)的时候 ni 的值没有发生变化,因此上面所谈到的 ni 的变化应该只适用于普通用户的进程(因为降低优先级不需要管理员权限)。
Steal time is the percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor.
这个主要是虚拟机的虚拟 CPU 等待真实物理 CPU 的时间,可以大致认为是 Ready 状态到 Running 状态的等待时间,如果这个值越大说明虚拟机运行状态越不好,因为它等待真实 CPU 的时间很长。
这一行表示的是物理内存的信息,单位是 KiB。
这一行主要表示的是对换区的数据,所谓对换区就是当操作系统发现内存满了之后,操作系统会选择部分不常使用的页面将它放到磁盘当中当需要使用的时候再将这部分数据从磁盘当中读取出来。
PID,表示进程号,就是每个进程的 ID。
- D,不能够中断的睡眠状态。
- R,表示程序正在 CPU 上执行。
- S,表示进程正在睡眠。
- T,进程被信号停止执行。
- t,表示进程正在被调试器追踪,调试器将这个进程停了下来。
- Z,zombie 表示是一个僵尸进程。
#include
void* func(void * args) {while (1)
{/* code */}
}
int main() {
#define num_threads 10
pthread_t t[num_threads];
for(int i = 0; i
执行上面的程序之后,top 的输出结果如下所示:
![Linux 命令 top 的宝藏知识 Linux 命令 top 的宝藏知识](https://www.xgss.net/wp-content/themes/puock/assets/img/z/load.svg)
从上面的这个结果我们可以知道 CPU 的占有率是可以超过 %100 的,这个值的计算主要是在刷新之间内一个进程消耗的 CPU 时间和在这段时间内一个 CPU 能够产生的 CPU 时间的比值。
%MEM,这个主要是进程使用的内存占用实际的可用的物理内存的比例。
TIME+,这个表示自从进程启动以来累计消耗的 CPU 时间。
COMMAND,这个表示启动进程的时候执行的命令。
top 命令交互操作
c,详细显示命令行的内容,你在交互模式下直接按下键盘上的 c 即可。
![Linux 命令 top 的宝藏知识 Linux 命令 top 的宝藏知识](https://www.xgss.net/wp-content/themes/puock/assets/img/z/load.svg)
o,在交互模式下先按下键盘上的 o,然后就可以输入过滤条件,在这里掩饰的是 COMMAND=a.out 的进程:
![Linux 命令 top 的宝藏知识 Linux 命令 top 的宝藏知识](https://www.xgss.net/wp-content/themes/puock/assets/img/z/load.svg)
k,shell 给我们提供了一个非常方便的操作我们可以在交互模式下选择我们想要杀死的进程,比如在下图当中我们杀死进程 135020。
我们先在交互模式下先按下键盘上的 k,然后输入进程号,然后输入回车,再输入想发送的信号类型。
输入进程号
![Linux 命令 top 的宝藏知识 Linux 命令 top 的宝藏知识](https://www.xgss.net/wp-content/themes/puock/assets/img/z/load.svg)
再输入想要发送的信号:
![Linux 命令 top 的宝藏知识 Linux 命令 top 的宝藏知识](https://www.xgss.net/wp-content/themes/puock/assets/img/z/load.svg)
这里可以输入代表信号的数字,也可以输入代表信号的名字,不同的信号的名字和代表输入如下:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
然后我们就只能够看到 root 用户的进程了。
以上就是本篇文章的所有内容了
![post-qrcode](https://www.xgss.net/wp-content/uploads/2023/07/二维码-微信公众号256x256.jpg)