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、键盘等)。
- 磁盘既是存储介质,也是一种设备,需要相应的管理机制。
- 网络功能支持:
- 提供网络通信底层支持。
- 示例命令:
ip、ifconfig、ping等网络工具依赖内核的网络功能才能与网络通信。
4. 课程总结与建议
- 核心认知:
- 感性认知:能够通过
top、ps等命令看到进程。 - 概念认知:清楚进程是运行的实例,程序是磁盘文件。
- 内核认知:清楚内核具备文件、进程、内存、设备、网络等管理功能。
- 感性认知:能够通过
- 学习建议:
- 区分内核功能与用户程序功能:分析代码时,思考哪些动作由内核完成(如系统调用、资源分配),哪些由用户程序完成。
- 自主学习能力:遇到新命令(如
top、pstree)时,善用man手册或 AI 工具查询细节。
- 后续内容:后续课程将继续深入介绍进程与线程开发的相关细节。