Linux进程知识点总结

目录

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() 创建子进程

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

2. getpid() / getppid()

  • getpid():获取自己进程PID
  • getppid():获取父进程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变量)

  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收养。

相关推荐
Databend1 小时前
Cluster Key 最佳实践:列怎么选、顺序怎么排与粒度设计
大数据·数据库·sql
IT小白杨1 小时前
哪种浏览器适合跨境电商?2026场景化方案建议与架构对比
服务器·chrome·经验分享·架构·安全架构·指纹浏览器
koi77u1 小时前
嵌入式学习---进程与线程(1)
linux·服务器·学习
三8441 小时前
WordPress REST API 参数校验机制剖析:为什么 author__not_in 无法直接盲注?
服务器·前端·数据库
椿.湫1 小时前
kubenetes pod管理
linux·运维·服务器
kobe_OKOK_1 小时前
ubuntu server 打包成一个压缩文件,并且在另一台电脑中解压缩
服务器·数据库·ubuntu
又是重名了1 小时前
集团项目信创改造3 mysql to dm 插入获取主键
数据库·mysql·dameng
敲代码还房贷1 小时前
安装wsl报错:HCS_E_HYPERV_NOT_INSTALLED
linux·python·ubuntu
zengjuan10051 小时前
[特殊字符]️ 松鼠备份 | 数据库备份方案即将重磅上线!三大模式组合拳,精准守护SQL Server每一笔数据
数据库·sqlserver·数据库备份·全量备份·增量备份·差异备份·日志和事务备份