进程管理
进程管理
进程,内核
进程与内核的联系-粗
当启动一个进程的时候,将进程的一些指令和数据装载到内存空间中,但进程要和硬件打交道的时候,进程通过系统调用,向内核发出操作硬件的申请,内核收到后,转入内核模式,进程需要退出。这是有与系统中的特权级别决定的,内核在Rank0层,而用户程序在Rank3层,中间的没有使用。
CPU是采取时间片的形式,当一个进程退出之后,重新执行的时候,进程是怎么知道从哪里开始运行?
这些就是靠内核的数据结构来记录,这个数据结构被称为任务结构Taskstructure,它追踪每一个进程的状态信息记录着进程的的一些信息。
线性地址和物理地址:
> 在每一个进程看来,只有它自己和内核,而且在进程自己看来,它的内存是连续的,但是在物理内存中就不一定是连续的。通过线性地址和物理地址区分,实现了虚拟内存。
在上图中,线性地址部分有一个逻辑的视图:
进程管理的相关命令:
-
ps:Process State,进程的状态信息
ps命令分有BSD风格的和SysV风格:-
-
BSD风格
BSD风格用常有的选项组合:aux
参数:
USER::由哪一个用户发起的
PID:进程号
%CPU:占据CPU的百分比
%MEM:占据物理内存的百分比
VSZ:虚拟内存大小
RSS:常驻内存大小
TTY:关联到哪一个终端,?表示与终端无关
STAT:表示进程状态
D:不可中断的睡眠
R:运行或就绪
S:可中断的睡眠
T:停止
Z:僵死
<:高优先级进程
N:低优先级进程
+:前台进程组中的进程
l:多线程进程
s:会话进程的首进程
START:启动时间
TIME:表示运行时长,真正占据CPU的时长,而是挂表时长
COMMAND:表示相关的进程名,如果外面加了中括号[],表示这是一个内核线程
-
-
SysV风格
SysV风格用常有的选项组合:-elF
常用参数:
UID:用户
PID:进程号
PPID:父进程号
PRI:优秀级
NI:nice值
RSS:常驻内存大小
PSR:正在运行在哪一个CPU
STIME:启动时间
TTY:关联到哪一个终端,?表示与终端无关
TIME:表示运行时长,真正占据CPU的时长,而是挂表时长
CMD:表示命令,如果外面加了中括号[],表示这是一个内核线程
-
-
pstree: 显示当前系统上的进程树
- pgrep:找符合某种特性的风格,并显示出来,只显示进程号
- pidof: 根据程序名称,查找其相关进程的ID号
- top:
拿上面的来做例子:
第一行:
09:45:55: 当前时间
up 49 min:运行时长
2 users:登录的用户
Load average:平均1分,5分,15分队列长度,值越小,CPU的负载越低
第二行:
Tasks:显示所有进程的相关信息的
431 total:一共有多少个进程
2 running:一共有多少个处于运行态
429 sleeping:有多少个处于睡眠的
0 stopped:有多少个处于停止的
0 zombie:有多少个处于僵死的
第三行:
%CPU(s):每一个CPU的负载情况,如果有多个的CPU的话,这个可能显示多个,默认情况显示CPU的平均的,按1可以展开所有CPU
0.5 us:占据用户空间百分比
1.2 sy:占据内核空间百分比
0.0 ni:nice值
97.5id:空闲百分比
0.2 wa:等待IO完成的时间
0.0 hi:硬件中断占据的时间
0.6 si:软中断占据的时间
0.0 st:被偷走的时间
第四五行:表示内存和交换空间的情况
PID:进程号
USER:用户
PR:优先级,RT表示实时优先级
NI:nice值
VIRT:虚拟内存值
RES:常驻内存值
SHR:共享内存值
S:状态
%CPU:占CPU百分比
%MEM:占内存百分比
TIME+:运行时长
COMMAND:相关的进程名
常有选项:
M:根据驻留内存大小进行排序
P:根据CPU使用百分比进行排序
T:根据累计时间进行排序
l:是否显示平均负载和启动时间
t:是否显示进程和CPU状态信息
m:是否显示内存相关信息
c:是否显示完整的命令信息
q:退出top
k:终止某个进程
+ vmstat:系统状态查看命令,Vmstat [m] [n]
m:表示多少时间刷新一次
n:表示显示多少次
参数:
r :运行队列长度
b :阻塞队列长度
swpd:交换大小
Free:空闲内存
Buff:缓冲的大小
Cache:缓存的大小
Si:swap in,动态值,表示有多少内存放到交换内存上去了
So:swap out,表示有多少页面调回内存中
Bi:有多少block块调入内存中了
Bo:有多少block块从内存中同步到硬盘了
In:中断的个数
Cs:进程切换的次数
Us:用户空间百分比
sy:占据内核空间百分比
id:空闲百分比
wa:等待IO完成的时间
st:被偷走的时间
- free :显示内存的信息
-
kill: 杀死进程或作业
kill %JOBID: 终止某作业,%不能省 -
bg:让后台的停止作业继续运行
用法:bg [[%]JOBID]- fg:将后台的作业调回前台
fg [[%]JOBID]
- fg:将后台的作业调回前台
- jobs: 查看后台的所有作业
作业号,不同于进程号
+:命令将默认操作的作业
-:命令将第二个默认操作的作业
前台作业:占据了命令提示符
后台作业:启动之后,释放命令提示符,后续的操作在后台完成
前台-->后台:
Ctrl+z: 把正在前台的作业送往后台
COMMAND &:让命令在后台执行
后台-->前台:使用fg命令