嵌入式学习---进程与线程(1)
·
一、进程基础概念
程序:存放在外存中的一段代码集合,是静态文件。
进程:程序动态执行的过程,包含创建、调度、消亡完整生命周期。
程序是磁盘上的文件,进程是这个文件跑起来之后的实例。
Linux 进程常用命令
| 命令 | 作用 |
|---|---|
top |
按 CPU 占用率查看进程信息,可看到 PID、PPID |
ps -ef |
查看进程信息 |
pstree |
查看进程父子关系树 |
ps -aux |
查看进程运行状态 |
kill -9 PID |
根据 PID 强制杀死进程 |
killall -9 进程名 |
根据进程名杀死进程 |
前后台任务操作
./a.out &:程序放到后台执行jobs:查看当前终端后台任务fg 编号:把后台任务调到前台运行ps:查看该终端下前后台任务
进程优先级
nice -n 优先级 进程任务:启动进程时设置优先级renice -n 优先级 进程PID:修改已经运行进程的优先级
PID:进程唯一 ID;
PPID:父进程 ID。
二、进程内存空间(32 位系统)
32 位操作系统下进程拥有 0‑4G 虚拟内存空间,分为文本段、数据段、系统数据段。
- 文本段:存放程序指令
- 数据段:字符串常量、未初始化全局 / 静态变量、初始化全局 / 静态变量
- 系统数据段:堆区、栈区
进程内存特性
- 每个进程拥有独立进程空间,进程之间互相隔离
- 所有进程共享 0‑4G 虚拟内存地址空间
- CPU 对进程分时复用,通过 MMU 内存映射单元,把虚拟地址映射到物理内存。
内存布局由低地址到高地址大致:文本段 → 数据段(.data/.bss/.rodata) → 堆区 → 栈区。
三、进程调度
多个进程需要同时运行,依靠操作系统调度算法分配 CPU 时间。
常见调度算法
- 先来先执行,后来后执行
- 高优先级调度算法
- 时间片轮转调度算法:宏观并行,微观串行。CPU 分给每个进程一小段执行时间,叫做时间片
- 多级队列反馈调度算法
- 负载均衡调度算法
进程 7 种状态
- 就绪态 (R):还没被 CPU 轮到,等待调度
- 运行态 (R):正在被 CPU 执行
- 可唤醒等待态 (S):缺少资源挂起,等待期间可以被唤醒
- 不可唤醒等待态 (D):等待过程中不能被唤醒
- 停止态 (T):进程被系统暂停
- 僵尸态 (Z):进程代码执行完毕,但内存资源没有被回收
- 结束态 (X):进程结束,资源完成回收
四、进程创建相关 API
1. fork () 创建子进程
pid_t fork(void);
- 功能:创建子进程,复制父进程地址空间
- 返回值:
- 父进程:返回子进程 PID
- 子进程:返回
0 - 失败:返回
‑1
fork 之后父子进程分开运行,拥有各自独立虚拟地址空间。
2. getpid() / getppid()
pid_t getpid(void); // 获取自己进程PID
pid_t getppid(void); // 获取父进程PID
3. exit () 结束进程
void exit(int status);
- 功能:结束当前进程
- 注意:
- main 函数中
exit()和return效果一致 - 普通函数内
return只是结束函数;exit直接结束整个进程
- main 函数中
五、进程消亡与僵尸进程
僵尸进程产生原因
子进程代码执行结束,但是父进程没有回收子进程资源,子进程就变成僵尸进程 (Z 状态)。
两种避免僵尸进程方案
- 父进程先结束:子进程变成孤儿进程,会被 init 进程收养;子进程退出时 init 自动回收资源。
- 父进程主动回收子进程:子进程退出,父进程调用回收接口释放子进程资源。
六、wait () 子进程资源回收
pid_t wait(int *wstatus);
- 功能:阻塞等待,回收子进程资源,防止僵尸进程,实现任务同步
- 参数:
wstatus,保存子进程退出状态的地址 - 返回值:成功返回被回收子进程 PID;失败返回‑1
配套宏,解析 wstatus 状态:
WIFEXITED(wstatus):判断子进程是否正常退出WEXITSTATUS(wstatus):获取子进程 exit 退出返回值WIFSIGNALED(wstatus):判断子进程是否被信号杀死WTERMSIG(wstatus):获取杀死进程的信号编号
wait 是阻塞函数,如果还有子进程没结束,父进程会卡在 wait 这里等待。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)