学习笔记——进程

进程

一、基本概念

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. 进程调度是操作系统的核心功能,确保系统高效运行

相关推荐
Swift社区3 分钟前
LeetCode 463 - 岛屿的周长
算法·leetcode·职场和发展
筑梦之路3 分钟前
Jenkins 构建部署多模块Java应用流水线参考——筑梦之路
java·运维·jenkins
秋风不问归客4 分钟前
linux 网络相关命令 及常用场景
linux·服务器·网络
皮卡蛋炒饭.4 分钟前
宽搜bfs与深搜dfs
算法·宽度优先
Coder_Boy_9 分钟前
基于SpringAI的智能AIOps项目:部署相关容器化部署管理技术图解版
人工智能·spring boot·算法·贪心算法·aiops
金牌归来发现妻女流落街头10 分钟前
【线程池 + Socket 服务器】
java·运维·服务器·多线程
牛奶咖啡1310 分钟前
Linux文件快照备份工具rsnapshot的实践教程
linux·服务器·文件备份·文件快照备份·rsnapshot·定时备份本地或远程文件·查看指定命令的完整路径
王哈哈^_^10 分钟前
【完整源码+数据集】道路拥塞数据集,yolo道路拥塞检测数据集 8921 张,交通拥堵识别数据集,路口拥塞识别系统实战教程
深度学习·算法·yolo·目标检测·计算机视觉·分类·毕业设计
大模型铲屎官11 分钟前
【操作系统-Day 47】揭秘Linux文件系统基石:图解索引分配(inode)与多级索引
linux·运维·服务器·人工智能·python·操作系统·计算机组成原理
崎岖Qiu20 分钟前
【设计模式笔记24】:JDK源码分析-Comparator中的「策略模式」
java·笔记·设计模式·jdk·策略模式