进程管理
进程,内核
进程与内核的联系-粗
当启动一个进程的时候,将进程的一些指令和数据装载到内存空间中,但进程要和硬件打交道的时候,进程通过系统调用,向内核发出操作硬件的申请,内核收到后,转入内核模式,进程需要退出。这是有与系统中的特权级别决定的,内核在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:退出topk:终止某个进程
+ 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]
- jobs: 查看后台的所有作业 作业号,不同于进程号 +:命令将默认操作的作业 -:命令将第二个默认操作的作业
前台作业:占据了命令提示符
后台作业:启动之后,释放命令提示符,后续的操作在后台完成前台-->后台:
Ctrl+z: 把正在前台的作业送往后台 COMMAND &:让命令在后台执行 后台-->前台:使用fg命令