1.进程(process):
进程是程序的一次执行的过程(一个程序可以对应多个进程)
进程是程序的实例 进行中的程序------正在运行中的程序
程序是静态的存放在硬盘中 进程是动态的存放在内存中
2.为什么需要进程?
为了描述和管理程序运行的动态过程
操作系统为了管理程序的动态运行过程,引入了进程
PCB(Process control block)进程控制块
3.程序的组成
程序的构成:.c // 程序源代码
a.out // 可执行程序
程序 = 代码 + 数据
标准 c程序 在内存中布局 //C标准规定的
linux下程序在内存中的典型布局:
栈
堆(动态区)(a.out执行后才产生)
bss(未初始化的全局变量)
data(已初始化的全局变量)
text
进程 = PCB + 进程实体(text | data | bss | 堆栈)
PID // Process ID // 进程的id号
S // stauts // 进程状态
4.进程的生命周期
ps aux | grep 程序名 //主要查看某个儿进程的pid号及信息
ps -elf | grep 程序名 //主要查看 父子进程 包含PID PPID // parent pid
pstree -sp pid号 查看父子进程间的关系(以树状图的方式展现 包含pid号)
kill --- 给进程发信号
当前进行状态: R:运行或可运行(就绪态)
S:可中断 的睡眠态
D: 不可中断的睡眠态
T:暂停态
Z:僵尸态
kill -l: 查看kill可发送的信号
kill -9: 给指定的pid号发送终结信息
kill -18: 发送恢复
kill -19: 发送暂停
5.进程编程
进程 ---为了实现多任务
//1.创建进程
//2.进程的执行
//3.进程结束
//4.进程结束时资源回收 --- 僵尸态
6.进程的创建
fork:创建一个进程(child process 子进程) 通过复制 调用进程 复制的子进程
成功在父进程返回子进程的pid号 子进程返回0 失败返回-1且子进程没有被创建
pid号为一个非负整数,最小为1
7.父子进程间,数据相互独立,不受影响
父子进程运行的顺序不确定,取决于操作系统 ---先调度谁
n个fork同时前后运行:一共2的n次方个进程,新生成2的n次方-1个进程