一.多任务处理

1.多进程

1、什么是进程?

进程是一个独立的可调度的活动(Cohen,Jofferson);
进程是一个抽象的实体,当它执行某个任务时,要分配和释放 各种资源。(P.Denning)
进程是可以并行执行的计算单位(Madnick,Donovan)
1.进程:**本质:进程是程序的一次执行的过程,进程是程序执行和资源管理(分配)的最小单元。 在Linux环境下,每个正在运行的程序都称为进程;
2.进程控制块(PCB):用于记录和管理进程的相关信息,状态 及资源使用情况;Linux内核是通过struct task_struct 来表示的;
3.进程号(PID):用于唯一标识一个进程的。是一个非零的正整数;
4.进程的特征:
4.1动态性: 进程是程序的执行过程。
4.2并发性: 同一时刻系统可以运行多个进程;
4.3独立性: 进程之间是独立运行的,一个进程运行不会影响另一个进程;
4.4异步性: 进程的运行不是“齐头并进”,而是有先有后
4.5结构特征:
5.进程的运行模式:
1.用户模式
2.内核模式(内核模式下进程无法被影响,只能等待进程运行结束)
6.进程状态及状态转换:
1.运行状态:进程代码正被处理器执行;
2.就绪状态:进程已经获取了除CPU之外,所有的资源,只等系统分配CPU资源,进程就可以执行;
3.阻塞状态:睡眠状态:因等待某个事件的发生,而暂停运行;
4.停止状态:进程已经执行完毕;
5.僵尸态: 进程已经结束,而PCB未回收;
进程的状态转换:
image.png**

2、进程控制(基本操作)

1.进程创建
image.pngimage.png
image.png
image.png
2.获取进程ID
image.png
3.进程的提前退出 EXIT_FAILURE(-1)
EXIT_SUCCESS(0) 参数不能超过255 是一个字节
子进程向父进程传递数据
image.png
image.png
4.进程等待
image.png
减少僵尸进程,保证子进程先退出,然后父进程退出;
5.在一个进程中如何启动另外一个进程
execl 往往在子进程中运行
image.pngenvp传数据
execv
image.png
image.png
image.png
exec族函数
execl()
execlp()
execle()

execv()
execvp()
execve()
exec族函数的区分:
1.族函数名称前四个字符都一样 exec
2.族函数名称前五个字符
l:(list) 需要将被启动程序的命令行参数以函数参数的方式一一罗列;
v:(vectory)需要将被启动程序的命令行参数作为一个字符指针数据的元素,
3.族函数名称前六个字符
无: 要求启动文件要以路径名来指定;
p:(path): 指定的启动程序,系统将去path环境变量所代表的路径下查找 ;
e:(enviorment) 要以环境变量的格式向被启动的程序传递参数
注意:exec族函数会覆盖调用进程的地址空间的,所以exec族函数,往往是由父进程创建子进程,在子进程中调用的;
image.png

2.多线程