学习笔记——进程

进程

一、基本概念

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

相关推荐
程序员-King.1 小时前
day158—回溯—全排列(LeetCode-46)
算法·leetcode·深度优先·回溯·递归
wrj的博客1 小时前
python环境安装
python·学习·环境配置
lcreek1 小时前
Linux信号机制详解:阻塞信号集与未决信号集
linux·操作系统·系统编程
优雅的潮叭1 小时前
c++ 学习笔记之 chrono库
c++·笔记·学习
星火开发设计2 小时前
C++ 数组:一维数组的定义、遍历与常见操作
java·开发语言·数据结构·c++·学习·数组·知识
shandianchengzi2 小时前
【记录】Tailscale|部署 Tailscale 到 linux 主机或 Docker 上
linux·运维·docker·tailscale
月挽清风2 小时前
代码随想录第七天:
数据结构·c++·算法
星幻元宇VR2 小时前
走进公共安全教育展厅|了解安全防范知识
学习·安全·虚拟现实
小O的算法实验室2 小时前
2026年AEI SCI1区TOP,基于改进 IRRT*-D* 算法的森林火灾救援场景下直升机轨迹规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
知识分享小能手2 小时前
Oracle 19c入门学习教程,从入门到精通, Oracle 表空间与数据文件管理详解(9)
数据库·学习·oracle