学习笔记——进程

进程

一、基本概念

1. 进程定义

  • 进程:程序执行的过程,需要分配内存资源和CPU资源

  • 程序:静态存储在硬盘中的代码和数据的集合

2. PCB(进程控制块)

  • 结构体:process control block

  • 系统用于描述正在运行的进程的所有信息

  • 包含内容

    • PID(进程标识符)

    • 当前工作路径 chdir

    • umask(默认0002)

    • 进程打开的文件列表

    • 信号相关设置(处理异步IO)

    • 用户ID、组ID

    • 其他状态信息

3. 进程资源限制

  • 打开文件个数:1024

  • 栈大小:8M

二、进程与程序的区别

方面 程序 进程
状态 静态(硬盘存储) 动态(执行过程)
存在时间 永久 暂时
状态变化 有创建、调度、消亡
并发性 可以并发执行
资源竞争 存在竞争计算机资源
对应关系 可运行多次→多个进程 可运行一个或多个程序

执行流程

复制代码
.c文件 → 编译 → a.out(可执行文件) → 执行 → process(进程,有PID)

三、虚拟内存与进程空间

1. 虚拟内存作用

  • 隔离性:A进程不能访问B进程的内存空间

  • 安全性:通过权限控制访问内核(Linux系统运行在内存上)

2. 进程分类

  1. 交互式进程:需要用户输入,给出对应输出

  2. 批处理进程:Shell脚本,批量执行命令

  3. 守护进程:自动运行,默认不需输入,休眠状态,特定条件触发运行

    • 示例:更新进程、杀毒软件

四、并发与进程调度

1. 并发

  • 定义:在一个时间段内同时运行多个任务的能力

  • 宏观并行:时间段内每个进程都在运行

  • 微观串行:某一时刻只有一个进程在运行

2. 进程调度

  • 原因:多个进程想运行,但CPU只有一个

  • 常见调度算法

    • 时间片轮转

    • 短任务优先

    • 进程优先级

    • 完全公平调度算法(CFS)

3. 进程上下文切换

  • 场景:A进程CPU时间片耗尽,需运行B进程

  • 过程

    1. A进程将状态信息(PCB、寄存器、PC、内存数据)缓存到硬盘

    2. A进程释放内存

    3. B进程将缓存数据读入内存

    4. B进程开始运行

五、Linux进程相关命令

命令 功能
ps aux 显示所有进程相关信息
top Linux任务管理器
kill -9 pid 强制关闭指定PID的进程
killall -9 a.out 关闭所有名为a.out的进程

六、进程相关函数

1. fork() 函数

复制代码
pid_t fork(void);
  • 功能:从当前进程克隆一个同名新进程(子进程)

  • 特点

    • 一次调用,返回两次

    • 执行顺序不确定(子进程或父进程可能先运行)

    • 变量不共享(各自独立的内存空间)

    • 子进程复制父进程的0-3G空间和PCB(PID不同)

    • 子进程从fork()之后开始执行

  • 返回值

    • 父进程中:成功返回子进程PID(>0),失败返回-1

    • 子进程中:成功返回0

2. getpid() 函数

复制代码
pid_t getpid(void);
  • 功能:获得调用进程的PID

  • 返回值:进程PID

3. getppid() 函数

复制代码
pid_t getppid(void);
  • 功能:获得调用进程的父进程PID

  • 返回值:父进程PID

七、重要概念总结

  1. 进程状态:包括创建、就绪、运行、阻塞、终止等状态

  2. 进程关系:父子进程关系,一个父进程可以有多个子进程

  3. 进程独立性:每个进程有独立的地址空间,互不干扰

  4. 进程复制:fork()创建的子进程是父进程的拷贝

  5. 进程生命周期:从创建到终止的完整过程

八、理解要点

  1. 进程是动态的,程序是静态的

  2. PCB是进程的核心,记录了进程的所有信息

  3. 并发是通过调度实现的,不是真正的并行

  4. 父子进程共享代码段,但数据段是独立的

  5. 进程调度是操作系统的核心功能,确保系统高效运行

相关推荐
码农学院2 小时前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
To_OC7 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
旖-旎8 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC9 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
世人万千丶9 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
delishcomcn10 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹10 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术10 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
大耳朵-小飞象11 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活