top 命令时 Linux 下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于 win 中的任务管理器,默认 5 s 刷新一次结果。
代码被 cpu 调用运行的过程 —— 进程
杀死进程:释放 cpu、内存的过程
僵尸进程:即父进程被杀死,子进程没有被杀死,没有占用 CPU,但占用内存
父进程可以生成一堆子进程,杀死父进程,子进程会被回收
(父进程)bash - (子进程)bash
00. 第一行为任务队列信息
12:38:33 | 当前时间 |
---|---|
up 50days | 系统运行时间,格式为 时:分 |
1 user | 当前登录用户数 |
load average:0.06,0.60,0.48 | 系统负载,三个数值分别为 1 分钟,5分钟,15分钟前到现在的平均值 |
01. 第二、三行为进程和 CPU 的信息
Tasks:29 total | 进程总数 |
---|---|
1 running | 正在运行的进程数 |
28 sleeping | 睡眠的进程数,不占 cpu |
0 stopped | 停止的进程数 |
0 zombie | 僵尸进程数 |
cpu(s):0.3% us | 用户空间占用 cpu 百分比 |
1.0% sy | 内核空间占用 cpu 百分比 |
0.0% ni | 用户进程空间内改变过优先级的进程占用 cpu 百分比 |
98.7% id | 空闲 cpu 百分比 |
0.0% wa(wait) | 等待输入输出的 cpu 时间百分比 |
0.0% hi | 硬件中断占用 cpu 时间的百分比 |
0.0% si | 软件中断占用 cpu 时间的百分比 |
0.0% st | 被偷走的 cpu 占用百分比(如虚拟机使用物理机的内存,大于 0 表示运行虚拟机) |
02. 第四、五行为内存信息:
Mem: 2050284k total, 552424k used, 1497860k free, 25576k buffers(缓冲区) # 内存
Swap: 4095996k total, 0k used, 4095996k free, 186724k cached (缓存) # 交换分区
内存中有一块单独的空间 buffer,叫缓冲区,从硬盘中加载到内存,先加载到 buffer
cache 是高速缓存区,为了解决 cpu 与内存的速度差,存在于内存中,将 cpu 经常要用访问的数据放在 cache中,避免了频繁加载同一类型数据。
03. 进程信息:
列名 | 含义 | 列名 | 含义 |
---|---|---|---|
PID | 进程 id | TIME | 进程使用的 cpu 时间总计,单位秒 |
PPID | 父进程 id | TIME+ | 进程使用的 cpu 时间总计,单位 1/1000秒 |
RUSER | real user name | %MEM | 进程使用的物理内存百分比 |
UID | 进程所有者的用户 id | VIRT | 进程使用的虚拟内存总量,单位 kb,VIRT=SWAP+RES |
USER | 进程所有者的用户名 | SWAP | 进程使用的虚拟内存中,被换出的大小,单位 kb |
GROUP | 进程所有者的组名 | RES | 进程使用的、未被换出的物理内存大小,单位 kb, RES=CODE+DATA |
TTY | 启动进程的终端名,不是从终端启动的进程为 ? | CODE | 可执行代码占用的物理内存大小,单位 kb |
PR | 优先级 | DATA | 可执行代码一位的步伐(数据段+栈)占用的物理内存大小,单位 kb |
NI | nice 值,负值表示高优先级,正直表示低优先级 | SHR | 共享内存大小,单位 kb |
P | 最后使用的 cpu,仅在多 cpu 环境下有意义 | nFLT | 页面错误次数 |
%CPU | 上次更新到现在的 cpu 时间占用百分比 | nDRT | 最后一次写入到现在,被修改的页面数 |
s | 进程状态:D = 不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程 | COMMAND | 命令名/命令行 |
WCHAN | 若该进程睡眠,则显示睡眠中的系统函数名 | Flags | 任务表示,展开 sched.h |
查看内存的使用状态
free
echo 'scale=2;1906280/1024/1024' | bc -l # 内存换算(scale=2 保留2位)
free -m # 以 M 为单位
free -h # 以 G 为单位
[root@hj ~]# free
1 2 3 4 5 6
total used free shared buffers cached
1 Mem: 2050284 552720 1497564 3172 26712 186776
2 -/+ buffers/cache: 339232 1711052
3 Swap: 4095996 0 4095996
echo ‘scale=2;339232/2050284 | bc -l‘
)进程是程序的一次动态进行
守护进程是在后台运行并提供系统服务的一些进程
父进程、子进程:当一个进程创建另一个进程时,第 1 个进程被称为新进程的父进程,而新进程被称为子进程
ps(process search)命令用于查看当前进程的状态
ps
ps aux # 详细查看,all、user_id、x 在哪个终端
ps aux | head -2 # 查看第一行,每行就是一个进程、TTY表示在哪个终端运行,?表示在后台不在任何终端
一般显示出的进程很多,要想精确找到想要的进程,可以与 grep 命令搭配使用
ps aux | grep 'init' # 找到进程中包含 init 字符的进程
ps aux | grep 'init' | grep -v 'grep' # 过滤掉包含 grep 的行,grep -v 反向匹配
ls /test | grep 'txt' # 过滤包含 txt 的文件
grep 'root' /etc/passwd # 过滤,包含 root 的行
除了可以利用管道符搭配 grep 命令过滤查看进程的 PID 外,还可以使用 pgrep 命令,它可以用于查询正在运行的进程的 PID 信息等。
语法:
pgrep [选项] '进程名'
选项:
查看终端、火狐浏览器的 PID:
pgrep -l 'bash'
pgrep -l 'firefox'
杀死进程,要想杀死一个进程,需要先找到进程的 PID(精确),或进程名(不精确),kill 实际上是发信号,要 cpu 挂起进程。
kill -9 PID # 强制杀死
杀死终端:
ps asx | grep 'bash' | grep -v 'grep' # 找到终端的 PID
kill -9 PID # 强制杀死终端 (精确)
杀死 Firefox
ps -asx | grep 'firefox' | grep -v 'grep'
kill PID # 杀死火狐
firefox & # 运行在后台
jobs # 查看后台运行的程序
fg %1 # 将后台调到前台运行,其中 1 为 工作号
bg %1 # 直接在后台运行
pstree # 进程树
pkill -9 'bash' # 按照进程名杀(全杀)
原文:https://www.cnblogs.com/midworld/p/11049508.html