一,定义
进程是一个程序执行的过程,会去分配内存资源,cpu的资源。
1.PCB是一个结构体,process control block。系统用于描述正在运行的进程的相关(所有)信息。

2.pcb常见内容
PID,进程标识符
当前工作路径 chdir
umask 0002
进程打开的文件列表 文件IO中有提到
信号相关设置 处理异步io,
用户id,组id
3.进程的资源限制
打开文件的个数1024 ,栈的大小8M

二,进程和程序的区别
1.程序:静态
存储在硬盘中代码,数据的集合
进程:动态
程序执行的过程,包括进程的创建、调度、消亡
.c ----> a.out-----> process(pid)
1)程序是永存,进程是暂时的
2)进程有程序状态的变化,程序没有
3)进程可以并发,程序无并发
4)进程与进程会存在竞争计算机的资源
5)一个程序可以运行多次,变成多个进程
一个进程可以运行一个或多个程序
2.虚拟内存
1.基于隔离性。在多进程中,a进程不能访问b进程的内存空间。
2.安全性(权限管理),linux也是运行在内存上的。所以需要通过权限控制,访问内核(linux系统)。
不是任意随意访问内核。

3.进程的内存空间

4.进程的分类
(1)交互式进程 进程运行后需要用户的输入,在给出对应的输出
(2)批处理进程 shell脚本 批量执行命令
(3)守护进程 进程会自动运行,默认不需要输入,处于休眠状态。等到特定条件满足。自己开始
运行。(更新进程,杀毒软件)
三,状态切换图
在操作系统中,在一个时间段内同时运行多个任务的能力。
操作系统的进程状态切换图

linux的进程状态切换图

四,系统的调度
在linux系统中,需要运行的任务(进程)有多个,每个都想运行。但是CPU,只有一个。所以就需要
linux 合理安排下一时刻,那个进程运行。
常见调度算法: 时间片轮转 ,短任务优先,进程优先级。 完全公平调度算法(CFS)。
宏观并行,在一个时间段中,每个进程都在运行。 微观串行,在时间的某一刻, 只有一个进程在
运行。
进程上下文切换 ,当a.out 的cpu的时间片耗尽是,就需要运行b。out。 a.out需要把自己的状态信
息(pcb,硬件上一些寄存器,PC. 内存相关数据)缓存到硬盘上。当a.out把内存释放出来后,b.out就
可以把自己前进缓存在硬盘的数据,读入内存。然后开始运行。

命令:
ps aux 显式所有的进程相关信息
top linux 中的任务管理器
kill 发信号
kill -9 pid 关闭指定pid的进程
killall -9 a.out 关闭多个a.out
相关函数
pid_t fork()
创建一个子进程。
一次调用,会返回两次。
子进程先运行和是父进程先进程,顺序不确定。变量不共享。
子进程复制父进程的0到3g空间和父进程内核中的PCB,但pid号不同。
功能:通过该函数可以从当前进程中克隆一个同名新进程。
克隆的进程称为子进程,原有的进程称为 父进程。
fork成功后,父子进程使用相同的代码段。父子进程开始运行的地方有所差异。
子进程是父进程的完全拷贝。
子进程的执行过程是从fork函数之后执行。
子进程与父进程具有相同的代码逻辑。
返回值:int 类型的数字。
在父进程中:成功 返回值是子进程的pid号 >0
失败 返回-1;
在子进程中:成功 返回值 0
fork成功后,父子进程使用相同的代码段。父子进程开始运行的地方有所差异。

获得pid相关的函数
getpid
pid_t getpid(void);
功能:
获得调用该函数进程的pid
参数:
缺省
返回值:
进程的pid
getppid parent
pid_t getppid(void);
功能:
获得调用该函数进程的父进程pid号
参数:
缺省
返回值:
返回父进程id号