概念
内核管理进程靠内核数据结构
task structure(内核中的一段内存空间,保存描述信息)
MMU转换线性地址跟地址对应关系,每一次转换都需要时间
TLB把MMU此前转换过的数据条目缓存至CPU中更快的缓存当中
进程号 内存空间 用户 父进程 CPU time
VSZ(虚拟内存集) 栈 堆 bss date text libraries
RSS(常驻内存集) 处于物理内存不能被swap交换出去
并行编程模型可以让一个进程跑在不同CPU核心上
进程是多线程的时候一个进程可以运行在多个CPU上
为了避免进程等待IO,于是睡眠交出CPU由其他进程运行,避免浪费时间
睡眠:1、进程所需要的资源没有被正常获取到
2、进程没有事情做
一个处于睡眠中的进程可以被唤醒
不可中断睡眠:进程所需要的资源依然无法正常获取,终端睡眠也没有意义
可终端睡眠:它可能不需要任何IO资源,执行完自己就睡了,用户来随时可以唤醒
僵尸进程:运行了,也结束了,所占据内存不释放。
Uninterruptible sleep 不可中断睡眠
Interruptible sleep 可中断睡眠
Zombie 无法回收内存的进程(每个进程结束由其父进程回收其资源)
kernel 上帝(由内核负责第一个进程)
init第一个人
优先级 0-139 (100-139用户控制;0-99内核调整)
O:
取值时间随着队列长度的变化的曲线
O(1) 队列无论多长取值都不变
O(n) 取值的增加随着队列长度增长而增长
O(logn) 随着队列增加取值时间成倍增加
O(2^n) 队列所谓大一点,取值时间急剧增长
高优先级的特点:
1、获得更多的CPU运行时间
2、更优先获得运行的机会
100-139
nice值:有雅致,友好的
-20-19对应100-1390变为-5等于120变为116
普通用户仅能够调大自己的Nice值
管理员则可以随便调
COMMAND
PS Process State
SysV风格
BSD
a 显示所有跟终端有关的进程
u 进程是有哪个用户启动
x 显示所有跟终端无关的进程(未必都是跟终端无关)
进程状态
D 不可中断的睡眠
R 运行或就绪
S 可停止中断的睡眠
T 停止
Z 僵死
< 高优先级进程
N 低优先级进程
+ 前台进程组中的进程
l 多线程进程
s 会话进程首进程
[] 内核线程
ps
-elF
-ef
-eF
ps
-o pid,comm,ni制定要显示的字段
-axo pid,comm,ni显示所有进程
pgrep
-u username 显示用户进程号(uid以什么身份运行)
-U username 显示用户进程号(euid谁发起的)
pidof 根据进程名查找进程号
pidof httpd(查看多少进程,每个用户会有一个进程)
top
-d 1 设置刷新秒
-b 批模式(能看到后面的)
-n 3 在批模式下,共显示多少批
M:根据驻留内存大小进行排序
P:根据CPU使用百分比进行排序
T:根据累计时间进行排序
l:是否显示平均负载和启动时间
t:是否显示进程和CPU状态相关的信息
m:是否显示内存相关信息
c:是否显示完整的命令信息
q:退出top
k:终止某个进程
进程间通信 (IPC inter process communication)
共享内存
信号:signal
semaphore:旗语
kill
-l 查看信号列表
1:SIGHUP 让一个进程不用重启,就可以重读配置文件,并让新的配置生效
2:SIGINT Ctrl+c 终断
9:SIGKILL 杀死一个进程(直接关闭)
15:SIGTERM 终止一个进程(给时间关闭资源)默认信号
指定一个信号
信号号码 kill -1
信号名称 kill -SIGKILL
信号名称简写 kill -KILL
kill PID
killall COMMAND(killall httpd)
调整已经启动进程的nice值
renice NI PID
启动时制定nice值
nice -n NI COMMAND (nice -n -3 useradd hbase)
前台作业:占据了命令提示符
后台作业:启动之后,释放命令提示符,后续的操作在后台完成
前台-->后台
Ctrl+z 正在前台的作业送往后台
COMMAND & 开始直接到前台
bg:让后台的停止作业继续运行
bg[JOBID] 缺省是加号作业
fg:将后台作业调回前台
fg [JOBID] 缺省是加号作业
kill %JOBID 终止某作业
jobs 查看后台所有作业
作业号,不同于进程号
+:命令将默认操作的作业
-:命令将第二个操作的作业
vmstat 系统状态查看命令
num每2秒钟的数据
1 5 每隔一秒钟显示一次 只显示五次
uptimetop 第一行的内容一样
cat /proc/meminfo查看内存相关信息