Linux系统中的几乎任何行动都会以进程的形式进行。若是你用网络浏览器查看网页,浏览器就做为进程运行。若是键入bash shell的命令行,这个shell就做为进程运行。若是你用chmod命令来更改文件权限,chmod就做为单独的进程来执行。进程是完成工做的形式,linux内核的基本职责就是为进程提供作事情的地方,不让彼此撞车。linux
进程是已启动的可执进程序的运行实例,进程有如下组成部分:
1. 已分配内存的地址空间
2. 安全属性,包括全部权凭据个特权
3. 程序代码的一个或多个执行进程
4. 进程状态
shell
进程与程序区分
程序:二进制文件,静态。
进程:是程序运行的过程,动态,有生命周期及运行状态浏览器
进程的属性:
1. 进程ID(PID):是惟一的值,用来区分进程
2. 父进程(PPID)
3. 启动进程的用户ID(UID)和所归属的组(GID)
4. 进程状态:分为运行R,休眠S,僵尸Z
5. 进程执行的优先级
6. 进程所链接的终端名
7. 进程资源占用:如内存、CPU等
缓存
进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动。之因此要建立进程,就是为了使多个程序能够并发的执行,从而提升系统的资源利用率和吞吐量。安全
程序只是一个静态的指令集合;而进程是一个程序的动态执行过程,它具备生命期,是动态的产生和消亡的。bash
进程家族
引导系统时,Linux内核的一个职责是启动第一个进程(一般是/sbin/init)。由于一个业已存在的进程继续派生,全部其余进程得以启动。网络
孤儿进程
若是说处理子进程终止后的善后事宜是父进程的职责的话,那么若是父进程在子进程以前终止该怎么办?这个子进程就变成了孤儿进程。多线程
僵尸进程
当进程退出,释放大多数资源和它的父进程收集它的返回值、释放剩余资源这两段时间之间,子进程处于一个特殊状态,被称为僵尸进程(zombie)。每一个进程都会通过一个短暂的僵尸状态。并发
五种进程状态命令行
可运行(R) 处于可运行状态的进程,一旦有机会,就会访问CPU。多个进程能够(并且常常)处于能够运行状态,可是由于在任何给定时间内只有一个进程能够在CPU上运行,因此实际上这些进程中只有一个在任何给定的实例上运行。 自愿(可中断的)睡眠(s) 从名称中能够看出,处于自愿睡眠状态的进程选择处于该状态。一般,这一进程在某事发生以前无事可作。 非自愿(不可中断或强制)睡眠\(D\) 内核迫使进程进入非自愿睡眠状态。该进程并无选择休眠,它情愿运行以便作完事情。当资源被释放时,内核会唤醒进程并将设置为可运行状态。 中止的(挂起的)进程(T) 用户有时决定挂起进程,被挂起的进程在被用户从新启动前不会执行任何操做。 僵尸进程(Z) 每一个快要终止的进程会经历一个短暂的僵尸状态,然而有时有些进程会一直停留在僵尸状态。
ps - report a snapshot of the current processes 语法 ps [options] 命令选项: a: 显示跟当前终端关联的全部进程 u: 基于用户的格式显示 x: 显示全部进程,不以终端机来区分 U: 显示某用户ID全部的进程 A: 显示全部程序 e: 此参数的效果和指定”A”参数相同 f: 用ASCII字符显示树状结构,表达程序间的相互关系 o: 自定义输出格式
ps -aux 输出解释
USER: 进程拥有者
PID: pid
%CPU: 占用的 CPU 使用率
%MEM: 占用的内存使用率
VSZ: 占用的虚拟内存大小
RSS: 占用的内存大小
TTY: 终端的次要装置号码 (minor device number of tty)
STAT: 该进程的状态:
D: 不可中断的静止
R: 正在执行中
S: 静止状态
T: 暂停执行
Z: 不存在但暂时没法消除
W: 没有足够的内存分页可分配
<: 高优先序的进程
N: 低优先序的进程
L: 有内存分页分配并锁在内存内 (即时系统或捱A I/O)
s 表示进程是控制进程
l 表示进程是多线程
+表示当前进程运行在前台
START: 进程开始时间
TIME: 执行的时间
COMMAND:所执行的指令
COMMAND中带[ ]的为系统建立的进程,直接显示路径的为用户所建立的进程
top命令
第一行:
当前时间 运行时间 当前登录系统的用户数量
load average后面的三个数字分别表示距离如今一分钟,五分钟,十五分钟的负载状况。
第二行:
Tasks: 165 total -总进程数为165
1 running -正在运行的进程数
162 sleeping -睡眠的进程数
2 stopped -中止的进程数
0 zombie -僵尸进程数
第三行:
0.3 us -系统用户进程使用CPU百分比
0.3 sy -内核中的进程占用CPU百分比
0.0 ni -用户进程空间内改变过优先级的进程占用CPU百分比
99.3 id -空闲的CPU百分比
0.0 wa -CPU等待I/O完成的时间总量
0.0 hi -硬中断占比
0.0 si -软中断占比
0.0 st -虚拟机占用物理的时间,例如物理机运行了KVM,则表示KVM占用物理机的CPU时间
第四行:
Mem: 物理内存
1005480 total -物理内存总量
73036 free -空闲内存总量
446528 used -使用的物理内存总量
485916 buff/cache -内核缓存内存量
第五行:
Swap: 交换内存
2097148 total -交换分区总量
2097148 free -空闲交换分区总量
0 used -使用的交换分区总量
397568 cached -可利用内存总量
第六行:
PID -进程号
USER -进程管理用户
PR -进程优先级
NI -nice值 负值表示高优先级,正值表示低优先级
VIRT - -虚拟内存
RES -物理内存
SHR -共享内存
S -进程状态
%CPU -上次更新到如今的CPU时间占用百分比
%MEM -进程使用的物理内存百分比
TIME+ -进程使用的CPU时间总计,单位1/100秒
COMMAND -进程名称
top快捷键:
s: 默认三秒刷新一次,按s修改刷新时间
空格: 当即刷新
q: 退出
P; 按CPU排序按CPU排序
M: 按内存排序
T: 按时间排序
数字1: 显示每一个内核的CPU使用率
u/U: 指定显示的用户
h: 帮助
kill命令
kill - terminate a process 语法 kill[选项][进程号] 选项 -l 打印信号编号,若果不加信号的编号参数,则使用“-l”参数会列出所有的信号名称 -a 当处理当前进程时,不限制命令名和进程号的对应关系 -p 只打印相关进程的进程号,而不发送任何信号 -s 指定发送信号
Kill命令工做原理:
向Linux内核发送一个系统操做信号和某个程序的进程标识号,而后系统内核就能够对进程标识号指定的进程进行操做
信号
HUP 1 重载配置文件
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + )
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
应注意,信号使进程强行终止,这常会带来一些反作用,如数据丢失或者终端没法恢复到正常状态。发送信号时必须当心,只有在万不得已时,才用kill信号(9),由于进程不能首先捕获它。要撤销全部的后台做业,能够输入kill 0。由于有些在后台运行的命令会启动多个进程,跟踪并找到全部要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止全部由当前shell启动的进程,是个有效的方法。
kill -9 强制结束
kill -0 检测进程是否存在
killall命令
Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)
命令格式: killall[选项][进程名] 命令选项: -I 忽略小写 -g 杀死进程组而不是进程 -i 交互模式,杀死进程前先询问用户 -l 列出全部的已知信号名称 -q 不输出警告信息 -s 发送指定的信号 -v 报告信号是否成功发送 -w 等待进程死亡 —help 显示帮助信息 —version 显示版本显示 -u:杀死指定用户的进程 -r:使用正规表达式匹配要杀死的进程名称 -p:杀死进程所属的进程组
如何调整优先级
nice命令
nice - run a program with modified scheduling priority 语法 nice [OPTION] [COMMAND [ARG]…] 选项 -n add integer N to the niceness (default 10) 设定一个优先级 默认为10 linux porcess 优先级为-20 - 19 数字越小优先级越大 调整优先级命令nice nice --19 ping -c 500 localhost -19优先级 nice -19 ping -c 500 localhost 19优先级
renice命令
renice - alter priority of running processes renice -n -19 -p 16863 renice -n -20 -u root 0 (用户 ID) 旧优先级为 -10,新优先级为 -20
普通用户只能下降程序的优先级 不能提升程序优先级,root随便
用nice以优先级为8运行ping命令
使用 top -b 命令查看ping目前的优先级,为8级
使用renice更改ping的优先级
更改为功