一、进程的定义与PCB
定义:进程时一个程序执行的过程,回去分配内存资源,cpu资源。
PCB:是一个结构体,系统用于描述正在运行的进程所有相关信息
PCB包含: 1.pid //进程ID 2.path //进程对应的程序路径 3.umask 0002 //文件权限掩码 4.int fd[1024] //文件描述符数组二、进程与程序的区别
| 对比维度 | 程序(program) | 进程(process) |
| 本质属性 | 静态实体 | 动态实体 |
| 存在形式 | 存储在硬盘中 | 内存中运行的实体 |
| 生命周期 | 永久存在(除非主动删除) | 临时存在(创建、调度、运行、消亡) |
| 状态变化 | 无状态 | 支持并发运行 |
| 资源占用 | 不占用cpu,内存等资源 | 占用cpu、内存等资源 |
| 资源竞争 | 无资源竞争 | 进程间会竞争cpu、内存 |
三、进程的分类:
1、交互式进程 进程运行后需要用户的输入,在给出对应的输出
2、批处理进程 shell脚本 批量执行命令
3、 守护进程 进程会自动运行,默认不需要输入,处于休眠状态。等到特定条件满足。自己开始运行。(更新进程,杀毒软件)
四、linux进程状态切换图
五、进程的调度
1.Linux 系统中有多个需运行的任务(进程),但 CPU 仅有一个,因此需合理安排下一时刻运行的进程。
2.常见调度算法:时间片轮转、短任务优先、进程优先级、完全公平调度算法(CFS)。
3.宏观并行:一个时间段中,每个进程都在运行;微观串行:时间某一刻,只有一个进程在运行。
4.进程上下文切换:a.out 的 CPU 时间片耗尽时,需运行 b.out。a.out 需把自身状态信息(PCB、硬件寄存器、PC、内存相关数据)缓存到硬盘,释放内存后,b.out 将缓存的自身数据读入内存,开始运行。
六、相关命令
ps aux //显示所有的进程相关的信息 top //linux中的任务管理器 kill //发信号 kill -9 pid //关闭指定pid的进程 kill -9 a.out //关闭多个 a.out七、相关函数
1.创建子进程函数
pid_t fork() //创建一个子进程特性:1.一次调用、会返回两次。
2.子进程和父进程谁先运行,顺序不确定,变量不共享。
3.子进复制父进程的0到3g空间和父进程内核中的PCB,但pid号不同。
返回值:int类型数字。
在父进程中,成功返回值>0;
失败,返回-1;
在子进程中,成功返回0;
2.获得pid相关函数
getpid pit_t getpid(void); //获得pid编号getppid parent //获得调用该函数进程的父进程的pid编号 pid_t getppid(void)