进程、程序

进程、程序

1. 进程查看命令详解

在 Linux 系统下,可以通过多种命令查看和管理进程信息。以下是课程中详细介绍的几个关键命令及其区别:

1. top 命令

  • 功能:查看系统当前的资源信息及进程状态。
  • 特点
    • 展示的是**实时(Real-time)**的进程信息。
    • 可以动态看到哪个进程正在运行、哪个处于暂停状态。
    • 显示进程占用的内存资源等实时状态。
  • 使用建议:可以通过 man top 查看手册,或利用 AI 工具查询命令细节,建议培养自主查询新命令的能力。

2. ps 命令

  • 功能:查看进程快照。
  • 特点
    • 展示的是**静态快照(Snapshot)**信息,即命令执行瞬间的进程状态。
    • 默认只显示当前终端(Terminal)下运行的进程。
    • 示例:直接输入 ps,可以看到当前 Shell(如 bash)以及 ps 命令本身的进程信息。
  • 常用参数
    • ps -ef:列出系统中所有的进程信息(全量列表)。
    • 配合 grep 过滤:例如 ps -ef | grep bash
      • 注意现象:过滤结果中通常会出现两条相关信息,一条是目标的 bash 进程,另一条是 grep 命令本身的进程(因为 grep 命令执行时也包含了关键字)。这是正常现象,无需惊讶,实际关注目标进程即可。

3. pstree 命令

  • 安装:部分系统需单独安装(如 apt install psmisc),安装后即可使用。
  • 功能:查看进程的继承关系
  • 特点
    • 树形结构展示进程间的父子关系。
    • 所有进程最终可追溯到根进程,通常是 systemd
    • systemd 创建用户进程,用户进程再往下创建子进程。
    • 示例:可以通过树形结构找到 bash 进程及其父进程 gnome-terminal 等层级关系。

2. 进程与程序的核心概念

理解进程与程序的区别是系统编程的基础,二者在概念和存在形式上有明确界定。

1. 什么是进程(Process)

  • 定义:进程是正在执行的程序的实例
  • 形成过程
    • 代码编写完成后,经过编译运行,加载到内存中执行,此时成为进程。
    • 内核(Kernel)会将代码载入到虚拟地址空间
    • 内核为进程的变量分配相应的内存空间
    • 内核建立数据结构(内核记账)来记录和管理该进程。
  • 内核记录信息
    • 进程 ID(PID)。
    • 用户 ID(UID)。
    • 组 ID(GID)。
    • 其他相关控制信息。
  • 本质:内核需要通过这些记录来控制进程,例如分配空间、调度执行等。

2. 什么是程序(Program)

  • 定义:程序是存储在磁盘上的文件
  • 两种表现形式
    • 源码形式:如 C 语言代码、Shell 脚本代码等。
    • 二进制机器码形式:即可执行程序(Executable),经过编译后的文件。
  • 语境差异:在日常描述中,“程序”一词可能指代源码,也可能指代二进制机器码,需根据上下文理解。

3. 进程与程序的关系

  • 程序是静态的文件,进程是程序动态运行的状态。
  • 程序运行起来后,由操作系统内核管理,成为进程。

3. 操作系统与内核的功能界定

课程明确了操作系统的广义与狭义定义,并详细梳理了内核的具体功能。

1. 操作系统的两层含义

  • 广义操作系统
    • 包含内核(Kernel)
    • 包含标准库(如 glibc)。
    • 包含标准实用程序(Shell 等)。
    • 包含上层应用软件(APP),例如 Qt 编写的程序、图形界面交互程序。
    • 示例:Ubuntu 发行版包含图形界面交互,这些是基于 Bash 等标准实用程序之上运行的。
  • 狭义操作系统
    • 仅指内核(Kernel)
    • 在技术文档中,有时提到的“系统”特指内核。
    • 本课程中为免误解,主要表述为“内核”。

2. 内核(Kernel)的主要功能

内核是操作系统的核心,提供底层服务和管理功能,主要包括以下方面:

  • 系统调用(System Call)
    • 内核提供的服务程序,平时处于静止状态,仅在用户程序调用时运行。
    • 示例:打开文件需要使用 open 系统调用,这是内核提供的服务。
  • 文件系统管理
    • 支持磁盘文件的打开、读写等操作。
    • 只有文件系统支持,用户程序才能与磁盘文件交互。
  • 进程管理
    • 负责进程的创建、调度、销毁等生命周期管理。
    • 涉及进程与线程相关的内容。
  • 内存管理
    • 负责物理内存的分配与管理。
    • C 语言中的 malloc 等内存申请函数,底层依赖内核进行真正的内存分配。
  • 设备管理
    • 管理存储设备(磁盘)、输入输出设备(屏幕、USB、键盘等)。
    • 磁盘既是存储介质,也是一种设备,需要相应的管理机制。
  • 网络功能支持
    • 提供网络通信底层支持。
    • 示例命令:ipifconfigping 等网络工具依赖内核的网络功能才能与网络通信。

4. 课程总结与建议

  • 核心认知
    • 感性认知:能够通过 topps 等命令看到进程。
    • 概念认知:清楚进程是运行的实例,程序是磁盘文件。
    • 内核认知:清楚内核具备文件、进程、内存、设备、网络等管理功能。
  • 学习建议
    • 区分内核功能与用户程序功能:分析代码时,思考哪些动作由内核完成(如系统调用、资源分配),哪些由用户程序完成。
    • 自主学习能力:遇到新命令(如 toppstree)时,善用 man 手册或 AI 工具查询细节。
  • 后续内容:后续课程将继续深入介绍进程与线程开发的相关细节。
UNIX/Linux:简史与标准化 2026-03-04

评论区