一、进程和线程的定义
1.进程:进程是指在操作系统中,正在运行的应用程序的一个实例,是系统进行资源分配和调度的基本单位。每个进程都有自己独立的地址空间、内存、数据栈以及其他用于跟踪执行的辅助数据,进程之间相互隔离,一个进程无法直接访问另一个进程的资源,除非通过进程间通信(IPC)机制,如管道、消息队列、共享内存等
2.线程:线程是进程中的一个执行单元,是程序执行的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,如地址空间、打开的文件等。每个线程都有自己的执行栈、程序计数器(用于记录下一条要执行的指令)和寄存器状态。线程的创建和销毁开销相对较小,上下文切换也比进程快
二、进程的状态
1. 运行态(Running)
进程正在 CPU 上执行。在单 CPU 系统中,同一时刻只有一个进程处于运行态;而在多 CPU 系统中,可能有多个进程同时处于运行态。
2. 就绪态(Ready)
进程已经准备好执行,只等待 CPU 分配时间片。当 CPU 空闲时,操作系统会从就绪队列中选择一个进程进入运行态。
3. 阻塞态(Blocked)
进程由于等待某个事件的发生而暂时无法执行,如等待 I/O 操作完成、等待信号量等。当事件发生后,进程会从阻塞态转换为就绪态。
4. 创建态(New)
进程正在被创建的过程中,操作系统会为其分配资源、初始化数据结构等。
5. 终止态(Terminated)
进程已经执行完毕或被终止,操作系统会回收其占用的资源。
三、进程的查看命令
1. 图形化查看
在 Linux 系统中,有很多图形化工具可以查看进程,如 GNOME System Monitor(适用于 GNOME 桌面环境)、KSysGuard(适用于 KDE 桌面环境)等。这些工具可以直观地显示系统中所有进程的信息,包括进程的名称、状态、CPU 使用率、内存使用率等。
2. ps 命令
ps
是一个常用的命令行工具,用于查看当前系统中进程的状态。常见的用法有:
(1)ps aux
:
USER
:表示启动该进程的用户。
PID
:进程的唯一标识符,用于在系统中区分不同的进程。
%CPU
:进程占用 CPU 的百分比。
%MEM
:进程占用物理内存的百分比。
VSZ
:进程使用的虚拟内存大小(单位为 KB)。
RSS
:进程占用的物理内存大小(单位为 KB)。
TTY
:进程关联的终端设备。若显示为 ?
,则表示该进程没有关联控制终端。
STAT
:进程的状态,常见状态有 R
(运行)、S
(睡眠)、D
(不可中断睡眠)、Z
(僵尸进程)等。
START
:进程的启动时间。
TIME
:进程累计使用 CPU 的时间。
COMMAND
:启动该进程所使用的命令。
(2)
ps ax:
PID
:这是进程的唯一标识符,每个进程在系统中都有一个独一无二的 PID。通过这个 ID,你可以对特定的进程执行操作,例如终止进程等。
TTY
:表示进程所关联的终端设备。如果显示为 ?
,则说明该进程没有关联控制终端。
STAT
:代表进程的状态,常见的状态有 S
(休眠)、R
(运行)、Z
(僵尸进程)等。
TIME
:指的是进程累计使用 CPU 的时间。
COMMAND
:显示的是启动该进程所使用的命令。
3. pidof 命令
pidof
命令用于根据进程名查找进程的 PID。例如,要查找名为bash的进程的 PID,可以使用以下命令:
4. pgrep 命令
pgrep
命令也用于查找进程的 PID,但它的功能更强大,可以根据进程名、用户、UID 等条件进行筛选。例如,要查找所有属于用户zsw的进程的 PID,可以使用以下命令: