0804 进程
Part 1.梳理思维导图
一.什么是进程
1.进程是程序的一次执行过程,是资源调度分配的独立单元
2.进程和程序的区别:
a.进程是在内存上存在的,会有创建和消亡的过程
b.程序是在硬盘上存在的
3.CPU的调度机制?
时间片轮转机制:cpu通过超快的处理速度,在执行完一个进程后再执行其他进程,让时间间隔看不出来
4.进程是资源分配的最小单位
5.进程的意义:
可以让多个死循环一起执行
二.进程的五态
1.创建态
2.就绪态:创建态申请了cpu资源
3.运行态:获得cpu资源的就绪态就会进入运行
4.终止态:运行态运行结束
5.阻塞态:输入io函数,使运行态阻塞(可以输入io函数进入就绪态)
三.进程的标识
1.pid:进程id(process id)
2.ppid:父进程id(parent process id)
3.pgid:进程组id(process group id)
4.SID:会话id(session id)
5.一个会话包含一个前台进程组id,多个后台进程组id,进程组又包含多个进程id。
四.三个特殊进程id
1.(0)indel进程:操作系统的引导进程,能创建1,2
2.(1)init进程:初始化进程,收养没有父进程的进程
3.(2)kthread进程:用户进程,线程调度
五.进程shell语句ps
1.ps -ef:查看每一个进程
2.ps -aux:查看进程的内存使用情况
3.ps -ajx/ps -ajx | grep a.out:打印进程树/只打印a.out的进程树
六.查看进程的id号
1.pidof 进程名
七.杀死进程
1.kill -l:查看所有信息
a. (2)SIGINT 用法和仔控制台输入ctrl c一样
b.(9)SIGKILL 杀死进程,并且该信号不能被捕获和忽略
c.(11)SIGSEGV 和段错误产生的杀死方法一样
d.(19)SIGSTOP ctrl z一样的作用,将进程挂起,并且该信号不能被捕获和忽略
2.kill的用法:
kill -9 进程id
kill -9 1001//用第九个信号的方法杀死进程
3.killall的用法
killall -9 进程名
killall -9 a.out//当a.out有多个进程的时候,就可以一起杀死
八.进程的状态
D:不可中断的休眠态
R:运行态
S:可中断的休眠态
T:挂起态
t:bug调试状态
W:分页
X:死亡态
Z:僵尸态
< 高优先级 (对其他用户不友好)
N 第优先级(对其他用户友好)
L 将页面锁定在内存
s 会话领导者
l 多线程
+ 运行在前端
九.进程的内存
1.虚拟内存
a.虚拟内存的划分
内核:3G - 4G
用户空间:0 - 3G
栈区:局部变量以及参数,计算机自动申请鹤释放,内存生长方向高向低
堆区:程序员手动申请和释放,malloc和free,内存生长方向低向高
静态区:.bss .data .RO .text
b.堆区栈区区别
1.堆区手动申请,栈区自动申请
2.栈区存储变量和参数,堆区需要申请
3.栈区从高到低,堆区从低到高
4.栈区内存基本没有碎片化,堆区碎皮化严重。
5.栈区8M,堆区2G - 3G
c.堆栈溢出
空间不足
例如:大型递归需要很大空间
d.内存泄漏
堆区申请了没有释放,或者释放不完全
解决方法:用gdb用指针指向堆区首地址
2.物理内存和虚拟内存
1.物理内存分为多个页框,虚拟内存分为多个页表,大小相同
2.虚拟内存的页表对应着物理内存的页框,通过控制虚拟内存来控制物理内存,更安全更独立
3.虚拟内存分为内核空间和用户空间,内核空间各进程之间共享,而用户空间不共享
十.进程相关函数
1.fork
a.功能:创建子进程,子进程拷贝父进程用户空间
b.格式
pid_t fork(void);
c.例子
pid_t pid = fork();//给pid父进程创建子进程
d.创建n次的子进程个数:2^n
e.写实拷贝:
1.子进程拷贝的是父进程的用户空间,当数据没有改变时,子父进程指向的是同一片空间
2.当子或父进程其中有一个在申请后改变,则两个进程指向的空间不同
3.这样可以提高速率和空间使用