一、进程概述
进程是已启动的可执行程序的运行实例。进程有以下组成部分。
- 已分配内存的地址空间。
- 安全属性,包括所有权凭据和特权。
- 程序代码的一个或多个执行线程。
- 进程状态。
每个进程都有唯一的进程标识PID,一个PID只能标识一个进程。
PPID为父进程ID。
进程状态是指程序执行过程中的变化。进程状态随着程序的执行和外界条件的变化而转换,一般分为3类:就绪态、运行态、阻塞态。如下图:
二、查看进程
1、静态查看进程:ps命令
ps 命令可以查看静态进程,仅仅是捕捉某一个瞬间某一个进程的状态,类似于给进程制作快照。
使用 “ps aux” 命令查看当前目录的进程。
每列显示的数据代表的意义如下:
USER | 进程的用户 | RSS | 该进程占用的固定内存量(KB) |
PID | 进程的ID | TTY | 该进程在哪一个终端上运行(登录者的终端位置),若与终端无关,则显示(?)。若为pts/0等,则表示由网络链接主机进程 |
%CPU | 进程占用的CPU百分比 | START | 该进程被触发启动时间 |
%MEM | 占用内存的百分比 | TIME | 该进程实际使用CPU运行的时间 |
VSZ | 该进程使用的虚拟内存量(KB) | COMMAND | 命令的名称和参数 |
查看进程按照CPU占用百分比的降序排列,使用该命令:ps aux --sort -%cpu
"ps -ef"命令查看UID、PID、PPID等信息。
2、动态查看进程:top命令
top命令可以实时动态地显示进程,类似于Windows系统中的任务管理器。
使用top 命令动态查看进程时,进程信息分为上下两部分,上面为整体信息、下面为每一个进程的信息。系统默认更新时间为3秒,也可以按回车键立即更新,具体如下所示。
我们现在一一分析这些字段的含义:
第一行
-
-
top - 14:55:31
表示当前时间,也就是当前真实的时间。 -
up 3:47
,表示这个系统从启动到现在的时间。 -
2 users
表示当前在使用这个机器的用户数量。 -
load average: 0.24, 0.08, 0.06
,这个值表示系统过去1分钟,5分钟,15分钟的系统负载,即任务队列的平均长度。- 系统平均负载:单核CPU情况下,0.00 表示没有任何负荷,1.00表示刚好满负荷,超过1侧表示超负荷,理想值是0.7;
- 多核CPU负载:CPU核数 * 理想值0.7 = 理想负荷,例如:4核CPU负载不超过2.8何表示没有出现高负载。
-
第二行
第二行主要表示当前系统当中任务的相关情况,所谓任务就是当前系统当中一共有多少个进程。
-
-
Tasks:235 totoal
,这个表示当前系统当中一共有235个进程。 -
1 runnung
,表示有一个进程正在执行。 -
234 sleeping
,表示有234个进程处于睡眠状态,也就是不需要使用CPU的状态。 -
0 stoped
,表示有0个进程处于stopped
状态,这个状态就是被停下来的进程,比如说通过ctrl+z让一个进程停下来,你可以通过给这个进程发送一个信号SIGCONT让这个进程恢复执行,linux当中进程的状态变换如下所示: -
0 zombie
,这个就表示僵尸进程的个数,这里是0个僵尸进程,所谓僵尸进程就是一个进程执行完成了,对于C程序来说你可以理解为你的main
函数执行完成了(这个不够准确,其实main
函数执行完成之后还会有其他函数需要执行,但是这里你可以大致这么理解),如果这个时候(函数执行完成),这个进程的父进程却没有接受子进程发送给他的信号(子进程在执行完成之后会给父进程发送信号,父进程需要通过wait等系统调用去接受这个信号),那么子进程就处于zombie状态,处于这个状态的进程就需要父进程接受它发送的信号,然后子进程的系统资源就可以被回收了,然后子进程会彻底消亡。
-
命令格式:top [选项]
选项:
"-d"参数 | 设置刷新时间,以秒为单位 | top -d 5(刷新时间) |
“-p”参数 | 指定查看一个或多个进程的动态信息 | top -p 10636,1(指定进程PID) |
"-u"参数 | 查看指定用户的进程 | top -u apache(指定进程名) |
“-n”参数 | 设置刷新次数,完成后自动退出 | top -n 2(刷新次数) |
三、信号控制进程
在进程运行过程中,若由于某些原因需要终止该进程,用户可以给予该进程一个信号(signal),进程接收到信号之后,就会依照信号的要求做出相应的反应。
1、 kill命令
Linux中的kill命令用来终止指定进程的运行。首先使用ps / pidof / top 等工具获取进程 PID,然后使用kill命令来杀死该进程。kill命令通过向进程发送指定的信号来结束相应的进程,在默认情况下,采用编号为15的 TERM信号。使用kill -l命令查看全部信号,具体如下所示。
常用的信号如下:
信号编号 | 名称 | 特性及意义 |
1 | SIGHUP | 启动被终止的进程,重新加载,PID不会发生变化 |
9 | SIGKILL | 强制终止进程,使用此信号可能导致进程无法再次启动 |
15 | SIGTERM | 默认信号,以正常流程终止进程,允许进程释放资源。若进程已经出现问题,无响应,此信号将不起作用 |
18 | SIGCONT | 恢复进程 |
19 | SIGSTOP | 暂停进程 |
kill命令格式: kill [参数] [进程号]
[注意]
- kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会默认发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如: kill -2 123
它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。
2、killall命令
killall 命令可以用于终止某个指定名称的服务所对应的全部程序。
四、进程优先级
1、基本概念
cpu 资源分配的先后顺序,就是指进程的优先级(priority) 。优先级高的进程有优先执行权利。配置进程优先权对多任务环境的 Linux 很有用,可以改善系统性能。
由于不是每个进程都同样重要,可以让进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略为SCHED_OTHER(也称为 SCHED_NORMAL),但还有其他一些调度策略用于不同的目的。
SCHED_OTHER 调度策略使用的进程的相对优先级称为进程的 nice值,有40个不同级别,其范围为-20~19,数值越小优先级越高,数值越大优先级越低。例如,-20的优先级最高,该进程不倾向于让出 CPU;19的优先级最低,该进程容易将CPU 让给其他进程。
【注意】普通用户调整应用程序优先权值的范围为0~19,只有超级用户有权使用更高的优先权值。
2、查看进程优先级
A、使用top命令查看nice级别
使用top 命令动态查看进程时,进程信息分为上下两部分,上面为整体信息,下面为每一个进程的信息。
其中:
- PID : 代表这个进程的ID号。
- PPID :代表这个进程是由哪个进程发展衍生而来的,亦即父进程的ID号。
- PR :将nice级别映射到更大的优先级队列,-20映射到0,+19映射到39。
- NI :代表这个进程的 nice 值。
B、使用ps 命令查看nice级别
在Linux系统中,用 ps –l
或 ps -al
命令则会类似输出以下几个内容:
标签:top,学习,命令,kill,信号,Linux,进程,CPU From: https://www.cnblogs.com/yyz1-/p/17855047.html