实验楼 Linux进程之管理控制

1、 进程的查看

咱们能够经过 top 实时得查看进程的状态,以及系统的一些信息(如 CPU、内存信息等),咱们还能够经过 ps 来静态查看当前的进程信息,同时咱们还可使用 pstree 来查看当前活跃进程的树形结构。nginx

1.1 top 工具的使用

top 工具是咱们经常使用的一个查看工具,能实时的查看咱们系统的一些关键信息的变化:正则表达式

top 是一个在前台执行的程序,因此执行后便进入到这样的一个交互界面,正是由于交互界面咱们才能够实时的获取到系统与进程的信息。在交互界面中咱们能够经过一些指令来操做和筛选。vim

top 显示的第一排,缓存

内容 解释
top 表示当前程序的名称
11:05:18 表示当前的系统的时间
up 8 days,17:12 表示该机器已经启动了多长时间
1 user 表示当前系统中只有一个用户
load average: 0.29,0.20,0.25 分别对应一、五、15分钟内cpu的平均负载

load average 在 wikipedia 中的解释是 the system load is a measure of the amount of work that a computer system is doing 也就是对当前 CPU 工做量的度量,具体来讲也就是指运行队列的平均长度,也就是等待 CPU 的平均进程数相关的一个计算值。安全

假设咱们的系统是单 CPU、单内核的,把它比喻成是一条单向的桥,把CPU任务比做汽车。bash

  • load = 0 的时候意味着这个桥上并无车,cpu 没有任何任务;
  • load < 1 的时候意味着桥上的车并很少,一切都仍是很流畅的,cpu 的任务并很少,资源还很充足;
  • load = 1 的时候就意味着桥已经被车给沾满了,没有一点空隙,cpu 的已经在全力工做了,全部的资源都被用完了,固然还好,这还在能力范围以内,只是有点慢而已;
  • load > 1 的时候就意味着不只仅是桥上已经被车占满了,就连桥外都被占满了,cpu 已经在全力的工做了,系统资源的用完了,可是仍是有大量的进程在请求,在等待。如果这个值大于2,大于3,超过 CPU 工做能力的 2,3。而如果这个值 > 5 说明系统已经在超负荷运做了。

这是单个 CPU 单核的状况,而实际生活中咱们须要将获得的这个值除以咱们的核数来看。咱们能够经过一下的命令来查看 CPU 的个数与核心数session

#查看物理CPU的个数 #cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l #每一个cpu的核心数 cat /proc/cpuinfo |grep "physical id"|grep "0"|wc -l

一般咱们都会先看 15 分钟的值来看这个大致的趋势,而后再看 5 分钟的值对比来看是否有降低的趋势多线程

 

top 的第二行数据,基本上第二行是进程的一个状况统计工具

内容 解释
Tasks: 26 total 进程总数  
1 running 1个正在运行的进程数
25 sleeping 25个睡眠的进程数
0 stopped  没有中止的进程数
0 zombie 没有僵尸进程数

来看 top 的第三行数据,这一行基本上是 CPU 的一个使用状况的统计了ui

内容 解释
Cpu(s): 1.0%us 用户空间进程占用CPU百分比
1.0% sy 内核空间运行占用CPU百分比
0.0%ni 用户进程空间内改变过优先级的进程占用CPU百分比
97.9%id 空闲CPU百分比
0.0%wa 等待输入输出的CPU时间百分比
0.1%hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0%si 软中断(Software IRQ)占用CPU的百分比
0.0%st (Steal time) 是 hypervisor 等虚拟服务中,虚拟 CPU 等待实际 CPU 的时间的百分比

CPU 利用率是对一个时间段内 CPU 使用情况的统计,经过这个指标能够看出在某一个时间段内 CPU 被占用的状况,而 Load Average 是 CPU 的 Load,它所包含的信息不是 CPU 的使用率情况,而是在一段时间内 CPU 正在处理以及等待 CPU 处理的进程数状况统计信息,这两个指标并不同。

来看 top 的第四行数据,这一行基本上是内存的一个使用状况的统计了:

内容 解释
8176740 total 物理内存总量
8032104 used 使用的物理内存总量
144636 free 空闲内存总量
313088 buffers 用做内核缓存的内存量

注意

系统的中可用的物理内存最大值并非 free 这个单一的值,而是 free + buffers + swap 中的 cached 的和

来看 top 的第五行数据,这一行基本上是交换区的一个使用状况的统计了

内容 解释
total 交换区总量
used 使用的交换区总量
free 空闲交换区总量
cached 缓冲的交换区总量,内存中的内容被换出到交换区,然后又被换入到内存,但使用过的交换区还没有被覆盖

在下面就是进程的一个状况了

列名 解释
 PID 进程id
USER 该进程的所属用户
PR 该进程执行的优先级 priority 值
NI 该进程的 nice 值
VIRT 该进程任务所使用的虚拟内存的总数
RES 该进程所使用的物理内存数,也称之为驻留内存数
SHR 该进程共享内存的大小
S 该进程进程的状态: S=sleep R=running Z=zombie
%CPU 该进程CPU的利用率
%MEM 该进程内存的利用率
TIME+ 该进程活跃的总时间
COMMAND 该进程运行的名字

注意

NICE 值叫作静态优先级,是用户空间的一个优先级值,其取值范围是-20至19。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。nice值中的 -20 到 19,中 -20 优先级最高, 0 是默认的值,而 19 优先级最低

PR 值表示 Priority 值叫动态优先级,是进程在内核中实际的优先级值,进程优先级的取值范围是经过一个宏定义的,这个宏的名称是 MAX_PRIO,它的值为 140。Linux 实际上实现了 140 个优先级范围,取值范围是从 0-139,这个值越小,优先级越高。而这其中的 0 - 99 是实时进程的值,而 100 - 139 是给用户的。

其中 PR 中的 100 to 139 值部分有这么一个对应 PR = 20 + (-20 to +19),这里的 -20 to +19 即是nice值,因此说两个虽然都是优先级,并且有千丝万缕的关系,可是他们的值,他们的做用范围并不相同

VIRT 任务所使用的虚拟内存的总数,其中包含全部的代码,数据,共享库和被换出 swap空间的页面等所占据空间的总数

在上文咱们曾经说过 top 是一个前台程序,因此是一个能够交互的

经常使用交互命令 解释
q 退出程序
I 切换显示平均负载和启动时间的信息
P 根据CPU使用百分比大小进行排序
M 根据驻留内存大小进行排序
i 忽略闲置和僵死的进程,这是一个开关式命令
k 终止一个进程,系统提示输入 PID 及发送的信号值。通常终止进程用 15 信号,不能正常结束则使用 9 信号。安全模式下该命令被屏蔽。

1.2 ps 工具的使用

使用 -l 参数能够显示本身此次登录的 bash 相关的进程信息罗列出来

ps -l

罗列出全部的进程信息

ps aux 

如果查找其中的某个进程的话,咱们还能够配合着 grep 和正则表达式一块儿使用

ps aux | grep zsh 

以查看时将连同部分的进程呈树状显示出来

ps axjf 

自定义咱们所须要的参数显示

ps -afxo user,ppid,pid,pgid,command 
内容 解释
F 进程的标志(process flags),当 flags 值为 1 则表示此子程序只是 fork 但没有执行 exec,为 4 表示此程序使用超级管理员 root 权限
USER 进程的拥有用户
PID 进程的 ID
PPID 其父进程的 PID
SID session 的 ID
TPGID 前台进程组的 ID
%CPU 进程占用的 CPU 百分比
%MEM 占用内存的百分比
NI 进程的 NICE 值
VSZ 进程使用虚拟内存大小
RSS 驻留内存中页的大小
TTY 终端 ID
S or STAT 进程状态
WCHAN 正在等待的进程资源
START   启动进程的时间
TIME 进程消耗CPU的时间
COMMAND 命令的名称和参数 

TPGID栏写着-1的都是没有控制终端的进程,也就是守护进程

STAT表示进程的状态,而进程的状态有不少,以下表所示

状态 解释
R Running.运行中
S Interruptible Sleep.等待调用
D Uninterruptible Sleep.不可中断睡眠
T Stoped.暂停或者跟踪状态
X Dead.即将被撤销
Z Zombie.僵尸进程
W Paging.内存交换
N 优先级低的进程
< 优先级高的进程
s 进程的领导者
L 锁定状态
l 多线程状态
+ 前台进程

其中的 D 是不能被中断睡眠的状态,处在这种状态的进程不接受外来的任何 signal,因此没法使用 kill 命令杀掉处于D状态的进程,不管是 killkill -9 仍是 kill -15,通常处于这种状态多是进程 I/O 的时候出问题了。

1.3 pstree 工具的使用

经过 pstree 能够很直接的看到相同的进程数量,最主要的仍是咱们能够看到全部进程的之间的相关性。

#参数选择: #-A :各程序树之间以 ASCII 字元來連接; #-p :同时列出每一个 process 的 PID; #-u :同时列出每一个 process 的所屬帐户名称。

2、进程的管理

2.1 kill 命令的掌握

直接对 pid 下手

#首先咱们使用图形界面打开了 gedit、gvim,用 ps 能够查看到 ps aux #使用9这个信号强制结束 gedit 进程 kill -9 1608 #咱们在查找这个进程的时候就找不到了 ps aux | grep gedit 

2.2 进程的执行顺序

nice 的值咱们是能够经过 nice 命令来修改的,而须要注意的是 nice 值能够调整的范围是 -20 ~ 19,其中 root 有着至高无上的权力,既能够调整本身的进程也能够调整其余用户的程序,而且是全部的值均可以用,而普通用户只能够调制属于本身的进程,而且其使用的范围只能是 0 ~ 19,由于系统为了不通常用户抢占系统资源而设置的一个限制

nice -n -5 vim &

咱们还能够用 renice 来修改已经存在的进程的优先级,一样由于权限的缘由在实验环境中没法尝试

renice -5 pid 
相关文章
相关标签/搜索