目录

Linux进程知识点总结

一、程序与进程

  1. 程序:存放在外存上的代码集合,静态文件。
  2. 进程:程序动态运行的实例,包含创建、调度、消亡整个生命周期。

核心区别:程序是静态文件;进程是动态执行过程。

二、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大段:

  1. 文本段(.text):存放程序指令代码,只读。
  2. 数据段
    • .rodata:字符串常量
    • .data初始化过的全局/静态变量
    • .bss未初始化全局/静态变量,程序启动自动清零
  3. 系统数据段
    • 堆(heap):malloc/free动态申请内存,向上增长
    • 栈(stack):局部变量、函数参数,向下增长

进程特性:

  1. 每个进程拥有独立虚拟地址空间
  2. 所有进程共享0‑4G虚拟地址,通过MMU内存映射单元映射到不同物理内存;
  3. CPU分时复用,宏观并行,微观串行。
    在这里插入图片描述

四、进程调度

  1. 时间片:CPU分配给单个进程一小段执行时间。
  2. 常见调度算法
  • 先来先执行
  • 高优先级调度
  • 时间片轮转调度(Linux主流:宏观并行,微观串行)
  • 多级队列反馈调度
  • 负载均衡调度

五、Linux进程7种状态

  1. 就绪态®:已经准备好,等待分配CPU时间片
  2. 运行态®:正在被CPU执行
  3. 可唤醒等待态(S):等待资源,收到信号可以被唤醒
  4. 不可唤醒等待态(D):等待IO硬件,不能被信号打断唤醒
  5. 停止态(T):进程被暂停
  6. 僵尸态(Z):子进程代码执行完毕退出,PCB资源没有被父进程回收
  7. 结束态(X):进程资源全部回收销毁

六、进程相关API函数

1. fork() 创建子进程

pid_t fork(void);
  • 返回值:
    • 父进程:返回子进程PID
    • 子进程:返回0
    • 失败:返回‑1
  • 原理:复制父进程地址空间,父子进程各自独立;fork之后两个进程同时往下跑。

2. getpid() / getppid()

  • getpid():获取自己进程PID
  • getppid():获取父进程PID

3. exit(status)

void exit(int status);

结束当前进程。

  • main函数:exit()return效果一致;
  • 普通函数:return只退出函数,exit()直接结束整个进程。

4. wait() 回收子进程(处理僵尸进程)

pid_t wait(int *wstatus);
  • 参数:&status传入int变量地址,内核把子进程退出状态写入该变量;传NULL代表不关心退出状态。
  • 返回值:成功返回被回收子进程PID;失败返回‑1。
  • 阻塞特性:父进程调用wait会阻塞,等待子进程结束,实现任务同步,防止僵尸进程。

状态解析宏(传入status变量)

  1. WIFEXITED(status):判断子进程是否正常退出
  2. WEXITSTATUS(status):拿到子进程exit传出的返回值
  3. WIFSIGNALED(status):判断进程是否被信号杀死
  4. WTERMSIG(status):获取杀死进程的信号编号

七、僵尸进程、孤儿进程

  1. 僵尸进程(Z)

    • 产生:子进程执行完毕退出,父进程没有调用wait回收子进程资源,子进程PCB残留,变成僵尸。
    • 危害:占用PID资源,大量僵尸会耗尽系统PID。
    • 解决:父进程调用wait() / waitpid()回收子进程。
  2. 孤儿进程

    • 产生:父进程先结束,子进程还在运行;子进程被init/systemd进程收养。
    • 好处:孤儿进程结束后,init会自动回收它的资源,不会产生僵尸

八、高频考试简答题汇总

  1. 程序和进程区别?
    程序是存放在磁盘的静态代码文件;进程是程序运行时动态实例,有生命周期。

  2. 进程虚拟地址空间分哪几块?各存放什么?
    文本段存指令;数据段存常量、全局静态变量;系统段包含堆、栈。

  3. 进程调度算法?
    先来先服务、高优先级、时间片轮转、多级反馈队列、负载均衡。

  4. 进程有哪些状态?
    就绪R、运行R、可中断等待S、不可中断等待D、停止T、僵尸Z、结束X。

  5. 僵尸进程怎么产生?怎么避免?
    子进程退出,父进程没有回收PCB → 僵尸;
    避免:①父进程wait回收子进程;②父进程先退出,子进程变成孤儿被init收养。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐