8.30 进程管理
1、操作系统基础
调用:kernel通过给应用程序提供system call的方式来提供硬件资源;
注意:应用程序也包括库文件;
库文件是运行在ring0上的一段程序代码,不对客户直接提供应用;
2、操作运行原理(一个进程和多个进程)
一个进程:首先把进硬盘中的程序代码加载到内存(复制),再将这段程序放到CPU上运算。此时,这段程序就会去调用(也会自动生成)很多的进程;由这些进程来完成程序制定的任务;
在这个过程中,我们需要解决数据输入与输出和存储的问题。
多个进程(暂时不讨论多核、CPU多线程的情况):在电脑中一般都是存在等多个进程的,而CPU只有一个。这时,我们使用time space的方式来给进程分配固定的时间运行;某个进程只能在轮到自己 运行的时候才会被放到CPU上去执行。时间一到,就会自动被踢下来,CPU则会执行下一个进程;
3、进程优先级(普通用户可以转让自己的优先级(高优先=>低优先))
0-139
0-99 守护进程 越大越优先
100-139 普通进程 越小越优先
nice值:定义普通进程的优先级,-19 - 20
轮了一圈之后怎么办?
在内存上提供了一个空间,这个空间会专门用来存放运行过后的进程
当所有进程运行完一遍后,这个空间就会和原有空间对调,再提供给CPU读取;
一直轮换,直到进程运行完为止。
4、如果进程没有运行完就被踢下来怎么办?(进程的数据怎么办)
1、程序数据
2、输入数据与输出数据(运行到一半留下来的数据)
3、进程元数据
task struct数据结构体:定义了进程数据的存储格式;我们将进程数据以及进程元数据存储于task struct中;这种结构下方便CPU快速存储与读取。
物理地址空间 -- 线性地址空间
进程在运行后的一些数据通过线性地址对应的物理地址存储到内存中(页框page);MMU(内存管理单元)就是用来将不连续的物理地址转换为连续的线性地址。
这些分开的页框的数据有两种组织形式:1、链表型数据 2、双向链表
5、如果进程造反怎么办?
linux结构下进程也是树形结构 -- pstree
内核不会直接管理;一般所有的进程都由上一级进程管理 -- 父子进程概念;
最大的进程 -- init 有权限去管理所有进程。
正常情况:
1、如何生成子进程
写实复制
父进程在需要完成一项工作的时候自己无法完成,则需要生成对应的子进程来完成这项工作,并且把自己的内存空间中的数据复制一份交给子进程,用来存储子进程所运行数据;这个过程叫做写实复制。
2、子进程完成任务以后如何关闭
子进程任务完成,交出所有占用资源,再由父进程关闭子进程,这个周期就结束了。
6、进程间的通讯原理
1、主机内进程通讯
single 信号通讯
共享内存
管道形式
2、主机间进程通讯
streams -- rpc
socket
7、进程类型
守护进程 -- 维护系统的正常运行
普通进程 -- 提供应用
另外一种分类方式:根据占用资源的不同分类
占用CPU多的进程 -- 后台运行的进程
占用内存多的进程 -- 前台显示的进程
8、进程的状态
进程和程序比较起来,进程是有生命周期的,它会被回收;
1、running 运行状态 2、stop 停止状态 3、sleeping 睡眠状态 4、zombie 僵死状态 5、中断
进程管理的命令
ps
pstree
dstat
默认没有安装,yum install dstat -y
动态显示各种信息,可以自己定义
top
与ps相反,top实时状态,会
htop
top的高级版本,默认yum源中是没有的,需要下载并编译安装
vmstat
查看虚拟机内存的相关信息
进程信息
内存信息
交换内存信息
system系统IO相关信息 -- in cs
cpu信息
-s 以统计的形式来显示相关信息
pmap
报告内存的映射信息
pmap pid
映射内存空间中的物理地址信息和CPU所能识别的线性地址信息;
pidof
通过进程ID(UID)来查看进程号(PID)
pdiof bash
kill
管理进程
通过kill对进程发送相应的操作信号
1信号 SIGHUP 让进程重读配置文件,不重启进程
2信号 SIGINT 中断进程
3信号 SIGQUIT 停止进程
9信号 SIGkill 强制关闭进程,不保存进程数据
15信号 SIGTERM 如果可能的话终止进程
17信号 SIGCHLD 无条件停止,但不终止进程
18信号 SIGCONT 手动让进程继续执行
19信号 SIGSTOP 进程处于停止状态
kill -9 pid
pkill
直接去关闭进程 -- 可以按照UID(名字)关闭进程
pgrep
进程过滤,也可以做进程查找 -- 类似于pidof
jobs
作业: -- 进程
前台作业:占用了当前的界面
后台作业:在后台自动运行
ctrl + z 将前台进程转到后台
fg 切回到后台进程:jobs -l (+代表默认切回来的进程)
bg 把前端进程送回到后台
COM & //命令运行的时候会放到后台运行
vim a.txt
.swp