进程:process, 过程
MMU: Memory Management Unit
内存保护
虚拟化:
CPU 32bit: 2^32=4GB 32位中linux1G内核(在高位空间即是cache空间)3G进程win为半儿分
线性地址空间物理地址空间:RAM+ROM
进程:init(1) --> fork() �C> init为首个进程使用fork系统调用来生成进程 除init均有父进程进程间通信:IPC, Inter Process Communication
signal, shm, semerphor
进程分为两类:
CPU-Bound: CPU密集型进程
IO-Bound:IO密集型进程进程分为三类:
批处理进程
实时进程
交互式进程调度器:
进程优先级:
动态优先级:
惩罚措施:
静态优先级:用户类进程
100-139:数字越小,优先级越高;
nice值:-20, 19
100, 139 nice值对应的优先级
实时优先级:内核类线程
1-99:数字越大,优先级越高;Linux 2.6: O(1)
进程切换:Context Switch, 上下文切换
内核模式,用户模式
内核空间,用户空间
ring0: 特权指令,敏感指令ring3:普通指令 --> 系统调用
IO:
poll: 轮询, 忙等待;
interupt: 中断, 中断的上半部和下半部
DMA:进程的状态:
Ready:
Running:
Sleeping
Interruptable Sleeping
Uninterruptable Sleeping
Stopped: 停止态非退出 需要人为叫醒
Zombie: 僵死态 此态过多即为内存泄漏COW: Copy On Write: 写时复制; 子进程复制给父进程
多线程任务 即一个进程内分多个线程 以利于多核运算
进程管理类的命令:
pstree, ps, top, vmstat, htop, pmappstree: 查看进程树;
ps: 显示系统向前进程状态的命令;
进程:
跟终端相关的进程 默认 tty查看当前终端
跟终端无关的进程a: 所有跟终端相关的进程
x: 所有跟终端无关的进程
STAT:
S:可中断睡眠
D:不可中断睡眠
R:运行或可运行;
T:停止
Z:僵死
s: session leader
l: 多线程进程;
+: 前台进程;
N: 低优先级进程;
<: 高优先级进程;
u: 以用户为中心显示进程相关信息
%CPU: cputime/realtime
%MEM:
VSZ: Virtual memory SiZe
RSS: 常驻内存集;-ef: PSR运行在哪颗CPU上
-e: 显示所有进程;
-f: 完整格式列表;
-eFH
-F:显示额外信息;
-H: 显示进程层次关系;-o 要显示的字段: 自定义显示格式
ps axo pid,commandpgrep pattern: 根据特定条件 如只显示某用户的进程
例如:pgrep bash
选项:
-U USERNAME:显示相关用户的进程;
-G GROUPNAME:相关组的进程;pidof: 查某程序进程号
top:
M: 按内存空间占用大小排序;
P:按CPU时间占用大小排序;
T:按累计时间排序;k: 杀死一个进程;
m: 是否显示内存摘要信息;
t: 是否显示CPU和进程的统计信息;
l: 是否显示负载信息q: 退出
选项:
-d #: 刷新延迟;
-b : 批次显示;
-n #: 指定批次显示时显示的批数;htop:
ps、pstree、pidof、pgrep、top、htop
vmstat
procs
r: 运行或等待CPU时间片的进程的个数;
b: 被阻塞(通常为等待IO完成)的进程队列的长度;
memory
swpd: 从物理内存交换至交换分区的数据量;
free: 未使用的物理内存空间;
buff: buffer cache的空间大小;元数据;通常是缓存写操作相关的数据;
cache: page cache的空间大小;数据;通常是缓存读操作的相关数据;
swap: si so 过大 物理内存不够用/有占大内存的程序
si: swap in, 数据进入交换分区数据量,即从内存至交换分区中去;(kb/s)
so: swap out, 数据离开交换分区数据量,即从交换分区至内存;
io: bi bo io可能成为系统瓶颈
bi: block in,从块设备读入的数据量, (kb/s)
bo: block out,保存至块设备的数据量, (kb/s)
system: in cs 过大为内核消耗CPU过甚
in: interrupt,中断发生的速率,通常意为每秒多个次中断请求发生;
cs: context switch, 上下文切换的速率; 切换过多数千上万则正在运行进程过多
cpu:
us: 用户进程所占用CPU时间的百分比;
sy: 内核
id: CPU空闲百分比;
wa: CPU用于等待IO完成的时间百分比;
st: 被虚拟化占去的时间百分比;sar �Cu
sar -P ALL
iostat -c
dstat -c
dstat -C 0,3进程间通信:IPC
共享内存,shm
信号:signal信号:
1:SIGHUP, 让进程不用终止,而重读其配置文件;
2: SIGINT, 中断正在运行的进程, 相当于Ctrl+c;
9:SIGKILL, 直接杀死;
15: SIGTERM, 终止; 待进程完成当前正在操作的文件后终止
19: SIGSTOP, 停止; 送入后台可由18唤醒
18:SIGCONT 继续向其它进程传递信号,使用kill 三种方式 kill -INT 进程号 /kill �C2 进程号 /kill �CSIGINT 进程号
kill -信号 PID
killall -信号 进程名
killall5 所有进程
kill �Cl 显示支持的所有信号
调整进程nice值:
普通用户:只能调大数字,调低优先级;管理员可以随意调整
-20, 19
100, 139ps axo pid,command,nice 显示nice值
nice -n # COMMAND 使命令工作在指定nice值下 默认nice为0即120优先级
renice # PID 调整一个已经处于运行状态的进程的nice值Linux作业控制:
前台:占用着终端;前台作业
后台:无须占用终端;查看后台作业 :jobs
前台-->后台:Ctrl+z
后台-->前台:fg %JOB_IDbg [[%]JOB_ID]:让其在后台运行;
启动时,让作业直接运行于后台:
# COMMAND &
# nohup COMMAND & 退出终端后继续进行作业也可被终止:
kill [%JOB_ID]axel -n 5 -o ./ http://a.b.c.d/abc.iso axel下载工具
screen: 一终端多屏 Ctrl+A D返回之前屏
screen
screen �Cls 显示打开的屏
screen -r SCREEN_ID 重新登录后恢复之前屏操作
exitLinux终端:
控制台:/dev/console
物理终端:
虚拟终端:/dev/tty[1-6]
模拟终端: /dev/pts/#
串行终端: /dev/ttyS#/proc:内核映射,伪文件系统;
PID
# cat /proc/PID/maps cmdline 文件夹是启动进程的命令 mem无法查看 maps 进程所依赖的库文件在物理内存的哪一段地址空间(空间可不连续)
# pmap PID: 查看进程运行的物理地址空间映射;多处理器:查看cpu运行状态
mpstat