目录
Linux进程知识点总结
一、程序与进程
- 程序:存放在外存上的代码集合,静态文件。
- 进程:程序动态运行的实例,包含创建、调度、消亡整个生命周期。
核心区别:程序是静态文件;进程是动态执行过程。
二、Linux进程常用命令
| 命令 | 作用 |
|---|---|
top |
按CPU占用率实时查看进程;显示PID(进程唯一ID)、PPID(父进程ID) |
ps -ef |
查看进程信息 |
pstree |
查看进程父子关系树 |
ps -aux |
查看进程完整运行状态 |
kill -9 PID |
强制杀死指定PID进程 |
killall -9 进程名 |
按进程名批量杀进程 |
./a.out & |
程序放到后台运行 |
jobs |
查看当前终端后台任务 |
fg 编号 |
把后台任务切回前台 |
ps |
查看本终端进程 |
nice -n 优先级 程序 |
启动程序时设置进程优先级 |
renice -n 优先级 PID |
修改已经运行进程的优先级 |
三、进程虚拟内存空间(32位系统0‑4G)
进程地址空间分为3大段:
- 文本段(.text):存放程序指令代码,只读。
- 数据段
.rodata:字符串常量.data:初始化过的全局/静态变量.bss:未初始化全局/静态变量,程序启动自动清零
- 系统数据段
- 堆(
heap):malloc/free动态申请内存,向上增长 - 栈(
stack):局部变量、函数参数,向下增长
- 堆(
进程特性:
- 每个进程拥有独立虚拟地址空间;
- 所有进程共享0‑4G虚拟地址,通过MMU内存映射单元映射到不同物理内存;
- CPU分时复用 ,宏观并行,微观串行。

四、进程调度
- 时间片:CPU分配给单个进程一小段执行时间。
- 常见调度算法
- 先来先执行
- 高优先级调度
- 时间片轮转调度(Linux主流:宏观并行,微观串行)
- 多级队列反馈调度
- 负载均衡调度
五、Linux进程7种状态
- 就绪态®:已经准备好,等待分配CPU时间片
- 运行态®:正在被CPU执行
- 可唤醒等待态(S):等待资源,收到信号可以被唤醒
- 不可唤醒等待态(D) :等待IO硬件,不能被信号打断唤醒
- 停止态(T):进程被暂停
- 僵尸态(Z) :子进程代码执行完毕退出,PCB资源没有被父进程回收
- 结束态(X):进程资源全部回收销毁
六、进程相关API函数
1. fork() 创建子进程
c
pid_t fork(void);
- 返回值:
- 父进程:返回子进程PID
- 子进程:返回
0 - 失败:返回
‑1
- 原理:复制父进程地址空间,父子进程各自独立;fork之后两个进程同时往下跑。
2. getpid() / getppid()
getpid():获取自己进程PIDgetppid():获取父进程PID
3. exit(status)
c
void exit(int status);
结束当前进程。
- main函数:
exit()和return效果一致; - 普通函数:
return只退出函数,exit()直接结束整个进程。
4. wait() 回收子进程(处理僵尸进程)
c
pid_t wait(int *wstatus);
- 参数:
&status传入int变量地址,内核把子进程退出状态写入该变量;传NULL代表不关心退出状态。 - 返回值:成功返回被回收子进程PID;失败返回‑1。
- 阻塞特性:父进程调用wait会阻塞,等待子进程结束,实现任务同步,防止僵尸进程。
状态解析宏(传入status变量)
WIFEXITED(status):判断子进程是否正常退出WEXITSTATUS(status):拿到子进程exit传出的返回值WIFSIGNALED(status):判断进程是否被信号杀死WTERMSIG(status):获取杀死进程的信号编号
七、僵尸进程、孤儿进程
-
僵尸进程(Z)
- 产生:子进程执行完毕退出,父进程没有调用wait回收子进程资源,子进程PCB残留,变成僵尸。
- 危害:占用PID资源,大量僵尸会耗尽系统PID。
- 解决:父进程调用
wait()/waitpid()回收子进程。
-
孤儿进程
- 产生:父进程先结束,子进程还在运行;子进程被
init/systemd进程收养。 - 好处:孤儿进程结束后,init会自动回收它的资源,不会产生僵尸。
- 产生:父进程先结束,子进程还在运行;子进程被
八、高频考试简答题汇总
-
程序和进程区别?
程序是存放在磁盘的静态代码文件;进程是程序运行时动态实例,有生命周期。
-
进程虚拟地址空间分哪几块?各存放什么?
文本段存指令;数据段存常量、全局静态变量;系统段包含堆、栈。
-
进程调度算法?
先来先服务、高优先级、时间片轮转、多级反馈队列、负载均衡。
-
进程有哪些状态?
就绪R、运行R、可中断等待S、不可中断等待D、停止T、僵尸Z、结束X。
-
僵尸进程怎么产生?怎么避免?
子进程退出,父进程没有回收PCB → 僵尸;
避免:①父进程wait回收子进程;②父进程先退出,子进程变成孤儿被init收养。