本章学习内容
——进程概念
——进程创建、切换和撤销
——进程调度
——进程分类
——进程状态
——进程管理工具
引言
在linux系统中,内核的功用有:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等,在这众多的模块中,进程管理是相对重要的一环,即使不像文件系统和网络功能那么复杂。在进程管理中,内核对进程的创建、切换、撤销和调度都有很详细的定义。
1、进程及相关概念
<1>进程:进程可以理解为程序执行的一个有生命周期的实例,有唯一的PID来标识,它包括可执行程序以及与其相关的系统资源,比如打开的文件、挂起的信号、内核内部数据、处理器状态、内存地址空间及包含全局变量的数据段等。从内核的角度看,进程也可以称为任务。
<2>进程描述符:与进程相关的事情非常多,比如进程的PID、状态、进程的优先级、进程的地址空间、允许该进程访问的文件等等,Linux内核为此专门设计了一个类型为task_struct的结构体,称之为进程描述符。进程描述符中包含了内核管理进程的所有信息,可以说,只要得到一个进程的进程描述符,就可以知道一个进程的所有信息。
2、进程的创建、切换和撤销
<1>进程创建:在系统启动时,会先在CPU上加载内核,之后内核创建第一个进程init(centos7上是systemd),init通过系统调fork()创建各种各样的子进程,各进程之间遵循Cow机制(即修改数据才分配内存)。
<2>进程切换:进程切换又称为任务切换、上下文切换。它是这样一种行为,为了控制进程的执行,内核挂起当前在CPU上运行的进程,并恢复以前挂起的某个进程的执行。
<3>撤销进程:进程终止后,需要通知内核以便内核释放进程所拥有的资源,包括内存、打开文件以及其他资源,如信号量
3、进程调度
<1>调度策略:调度策略就是这样一组规则:决定什么时候以怎样的方式选择一个新进程运行。所以定义一个进程的优先级来满足这样一种策略。这个策略以0-139的优先级来表示。
实时优先级:1-99
无需调整,数字越大,优先级越高
静态优先级:100-139
可调整,数字越小,优先级越高
优先级以Nice值调整
Nice:-20—-19 ,存在于task_struct结构体中
公式如下:
pri(new)=nice+pri(old)
<2>调度算法:早起的Linux中,调度算法是根据进程的优先级选择“最佳”进程来执行,它的缺点是时间开销与“可运行进程数量”有关。某种调度算法一定满足一种函数关系,业界称为Big O
Big O:时间复杂度,用时和规模的关系。有:
O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)
4、进程类型
<1>进程的分类标准一:
守护进程: 监控非独立服务的进程
普通进程:只负责自己本身服务的提供
注意:两者可相互转化
<2>进程的分类标准二:
CPU-Bound:CPU密集型,非交互(图形)
IO-Bound:IO密集型,交互(操作)
5、进程状态
在内存中运行的进程也有着各种各样的状态
运行态R:running
就绪态:ready
睡眠态
可中断S:interruptable
不可中断D:uninterruptable
停止态T:stopped,暂停于内存中,但不会被调度,除非手动启动
僵死态Z:zombie,结束进程,父进程结束前,子进程不关闭
6、进程作业
进程在运行时,我们可以称其为作业,根据其运行的环境,可分为前台作业和后台作业
注:ctrl+z、ctrl+c只对前台运行的进程有效,jobs查看作业。
后台运行的程序如果有标注输出,比如ping,ctrl+z,ctrl+c无法生效。要杀死进程才可以。
也可以使用kill向进程发信号
<1>常用信号:man 7 signal
1) SIGHUP: 无须关闭进程而让其重读配置文件
2) SIGINT: 中止正在运行的进程;相当于Ctrl+c
9) SIGKILL: 杀死正在运行的进程
15) SIGTERM:终止正在运行的进程
18) SIGCONT:继续运行
19) SIGSTOP:后台休眠
<2>指定信号的方法:
(1) 信号的数字标识;1, 2, 9
(2) 信号完整名称;SIGHUP
(3) 信号的简写名称;HUP
补充:killall COMMAND:杀死所有COMMAND进程
pkill -u USER:杀死所有以USER身份运行的进程
pkill -u root:危险操作,切勿模仿
既然进程可以运行在后台,提供一种方法将多个进程同时运行在后台,增强效率。
(f1.sh&);(f2.sh&);(f3.sh&)
{ f1.sh& f2.sh& f3.sh& }
或者写在一个脚本中。
vi all.sh
f1.sh&
f2.sh&
f3.sh&
7、进程管理工具
<1>ps axu
USER | 运行进程的用户 |
PID | 进程ID |
%CPU | 占用CPU |
%MEM | 占用内存 |
VSZ | 虚拟内存集 |
RSS | 实际内存集 |
TTY | 终端信息 |
STAT | 进程状态 |
START | 进程状态 |
TIME | 运行时间 |
COMMAND | 进程名称 |
也可以通过特定的选项来显示信息
ps -axo pid、comm、%cpu、%mem、state、tty、euser、ruser
以上也证明了passwd适用于suid权限的,虽然运行用户是user,但其真正有效的是root
<2>uptime
开机时间
运行时间
登陆用户数目
平均负载:指在特定时间间隔内运行队列中的平均进程数
第一分钟负载
第五分钟负载
第十分钟负载
注意:1、5、10分钟的平均负载,一般不会超过1
参考值:如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能良好。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。
如果linux主机是1个双核CPU的话,当Load Average为6的时候说明机器已经被充分使用。
<3>top
Tasks
total | 进程总数 |
running | 运行进程数 |
sleeping | 休眠态进程数 |
stopped | 停止态进程数 |
zobie | 僵死态进程数 |
%Cpu(s)
us(user space) | 用户空间占用CPU百分比 |
sy(system) | 内核空间占用CPU百分比 注:高负载时:us:sy=7:3 |
ni(nice) | 修改nice值占用的CPU百分比 |
id(idle) | 空闲的CPU百分比 |
wa(wait) | 等待IO完成占用的CPU百分比 |
hi(hardware interrupt) | 硬中断占用CPU百分比 |
si(software interrupt) | 软中断占用CPU百分比 |
st(stole) | 被偷走的CPU,比如VMware |
buffer(缓冲) | 元数据 |
cache(缓存) | 数据 |
PID | 进程号 |
USER | 进程发起者 |
PR(priority) | 优先级 |
NI(Nice) | nice值 |
VIRT | 虚拟内存集 |
RES | 常驻内存集 |
SHR | 共享内存集 |
S(status) | 状态 |
%CPU | CPU占用比 |
%MEM | 内存占用比 |
TIME+ | 运行时长 |
COMMAND | 启动进程 |
对显示排序的方法:
P | 占据的CPU百分比 |
M | 占据内存百分比 |
T | 累积占据CPU时长 |
首部信息显示:
l | uptime信息 |
t | tasks及cpu信息 |
#数字 | cpu分别显示 |
m | memory信息 |
s | 修改刷新时间间隔 |
Esc | 退出 |
k | 终止指定进程 |
W | 保存文件 |
q | 退出命令 |
注:
直接查看进程编号 pidof COMMAND 或者 ps aux | grep **—–>kill
<4>htop
比top更加高级的进程管理软件
f1帮助
f2切换CPU、mem、swap显示方式
f10退出
选中进程执行k
<5>vmstat:查看磁盘吞吐量
vmstat -s: 内存的汇总信息
r | 等待运行的进程的个数,和核心数有关 |
b | 处于不可中断睡眠态的进程个数(被阻塞的队列的长度) |
swap:
si | 从磁盘交换进内存的数据速率(kb/s) |
so | 从内存交换至磁盘的数据速率(kb/s) |
io:
bi | 从块设备读入数据到内存的速率(kb/s) 读 |
bo | 从内存写入磁盘的速率(kb/s) 写 |
分别使用 dd if=/dev/sda of=/dev/null
dd if=/dev/sda of=/tmp/f1 可做测试
Server端:glances -s -B IP
Client端:glances -c IP <7>dstat
磁盘的读写可通过dd if=/dev/sdb of=/dev/zero 测试
网络监控可通过ping -f IP -s 65507测试。
原创文章,作者:mfwing,如若转载,请注明出处:http://www.178linux.com/46016
评论列表(1条)
总结的很棒,对进程管理基础与命令介绍的很详细哦。赞一个