进程线程
多任务编程
1、进程
2、线程
进程(process)
进行中的程序 --- 正在运行中的程序
进程 --- 程序的一次执行的过程
进程 是程序的一个实例
进程是跑起来的程序
一个程序可以对应多个进程
程序 静态 硬盘
进程 动态 内存
为什么需要进程?
-为了描述和管理程序运行的动态过程
操作系统为了管理程序的动态运行过程,引入了进程
PCB(Process control block)进程控制块
进程的组成
程序的构成:.c // 程序源代码
a.out // 可执行程序
程序 = 代码 + 数据
标准 c程序 在内存中布局 //C标准规定的
linux下程序在内存中的典型布局:
栈
堆(动态区)(a.out执行后才产生)
bss(未初始化的全局变量)
data(已初始化的全局变量)
text
进程 = PCB + 进程实体(text | data | bss | 堆栈)
PID // Process ID // 进程的id号
S // stauts // 进程状态
进程的生命周期
man ps 查询当前进行状态
ps aux | grep 程序名 //主要查看某个儿进程的pid号及信息
eg:ps aux | grep a.out //查看a.out
ps -elf | grep 程序名 //主要查看 父子进程 包含PID PPID // parent pid
eg:ps -elf | grep a.out //查看a.out
pstree -sp pid号 //用途 查看父子进程间的关系(以树状图的方式展现 包含pid号)
kill //杀死 --- 给进程发信号
killall //可以指定 进程 名称 这种方式发送信号
eg:kill -9 a.out
进程编程
进程 ---为了实现多任务
//4.进程结束时资源回收 --- 僵尸态
进程的创建
fork
创建一个进程(child process 子进程)
通过复制 调用进程 复制的子进程
返回值:
成功 在父进程中 返回了 子进程的pid号
在子进程中 返回了 0
失败 -1 并且没有 子进程被创建
注意:
pid号实际上是一个非负整数,最小的pid号为1
32位的平台 每个进程拥有独立的4G 内存空间(虚拟的)
每个进程运行在各自的独立空间
父子进程间,数据相互独立,不受影响
父子进程运行的顺序不确定,取决于操作系统 ---先调度谁
n个fork同时前后运行:
一共2的n次方个进程,新生成2的n次方-1个进程
fork&&fork||fork:
嵌入式学习第二十五天,今天学习了新的内容,进程 的相关知识。进程就是正在运行中的程序,进程是静态的。也学习了一些关于查询linux系统进程的一些命令,还有创建进程的函数fork。后面的进程学习将会持续一周,继续加油!