进程
进程是程序执行的过程。
程序是静态的,是一些指令的的结合,保存在磁盘中。
程序一旦开始执行,就产生了进程,操作系统会为进程分配资源,进程是分配资源最小的单位。
开始运行--------------------------------------------------------------------------------------->结束
时间轴
时间片的轮转
优先级只代表抢占到资源的概率,并不是优先执行。 <竞争CPU资源>
每个任务的执行时间是由时间片来决定。 时间片(将一段时间分成多份)。
例如:1s/1000 = 1微秒;
状态转化
进程状态
(1)运行态:此时进程 正在运行 或 准备运行 或 就绪 正在运行
(2)睡眠态:等待事件发生 或 资源就绪
*可中断睡眠:可被信号唤醒
(3)
父子进程并发执行,子进程的代码是 fork() 之后的代码
如果父进程在子进程打印之前结束,则会回到终端命令后继续执行子进程;
如果子进程的打印语句在父进程结束之前执行,则会再回到终端命令之前执行完毕。
父子进程的执行顺序由操作系统的调度算法决定的,不是有程序本身决定的
<2>
子进程会拷贝父进程的地址空间的内容,缓冲区,文件描述符等
创建多个进程
创建多个进程时,最主要的原则是由父进程统一管理,不能进行递归创建:
进程的退出(process)
在进程结束时,需要释放分配给进程的空间以及内核中产生的各种数据结构。
资源的释放需要通过exit 函数 或 _exit函数来完成。
在程序结束时,会自动调用exir 函数。
头文件 #include <stdlib.h>
exit 与 _exit 的不同
_exit() 属于系统调用,能使进程停止运行,并释放空间以及销毁内核中的各种数据结构。
exit() 基于_exit() 函数实现,属于库函数,会自动刷新IO 缓冲区。