什么是进程
进程的定义
进程 process
是正在运行的程序,包括:
- 分配的内存地址空间
- 安全属性,包括所有权和特权
- 一个或多个线程
- 进程状态
进程的环境
包括:
- 本地和全局变量
- 当前调度上下文,
- 分配的系统资源,如文件和网络端口
当前(父)进程复制自己的地址空间 (fork) 来创建一个新的(子)进程 结构,每个进程具有 PID
在 RHEL8 中,1号进程是 systemd
进程生命周期如下:

通过 fork 例程,子进程继承安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量, 以及程序代码。随后,子进程可能 exec 其自 己的程序代码。通常,父进程在子进程运行期间处于睡眠状态,设置一个在子进程完成时发出信号的请求(wait)
在退出时,子进程已经关闭或丢弃了其资源和环境。唯一剩下的资源称为僵停 ,是进程表中的一个条目。父进程在子进程退出时收到信号而被唤 醒,清理子条目的进程表,由此释放子进程的最后一个资源。然后,父进程继续执行自己的程序代码
描述进程状态
多任务操作系统中,每个 CPU 同一时间处理一个进程,进程运行时具有不同状态

Linux 进程的状态:
列出进程
ps 命令
用于列出当前进程,包括:
- 运行进程的用户 UID
- 进程 PID
- CPU 在其上运行时间
- 分配的内存量
- 进程的 stdout 位置,称为控制终端
注意:ps -aux(UNIX 格式) 不等于 ps aux(BSD 格式)
ps 的常用选项是 aux、-ef、lax(长列表)
-
ps aux
:这是一个常见的用法,用于以完整的格式显示所有用户的进程。其中,a
表示显示所有用户的进程,u
表示显示详细的进程信息,x
表示显示没有控制终端的进程。 -
ps -ef
:与ps aux
类似,也会显示所有用户的进程信息。其中,-e
表示显示所有进程,-f
表示显示详细的进程信息。 -
ps lax
:这个选项稍微不太常见,但在某些系统上也可用。其中,l
表示以长格式 (long format) 显示进程信息,a
表示显示所有用户的进程,x
表示显示没有控制终端的进程。

控制作业
描述作业和会话(job and session)
job control 是 shell 的一种功能,允许单个 shell 实例运行和管理多个命令
一个终端同一时间只能对一个作业发送信号和读取信息,这个作业进程成 为该终端的前台进程
可以将作业进程放入后台,可以运行也可以暂停
每个 terminal 就是一个会话,里面可能含有一个前台进程和任意数量的后 台进程。一个作业只能属于一个会话
ps 输出中有些进程由系统启动,而不是由 shell 提示符启动,这种进程没 有 terminal,无法切换到前台,在 ps 中显示为?
在后台运行作业
在命令后加
&
即可
在后台启动
,shell 继续显示提示符

jobs 命令可以显示作业列表 fg %jobid(作业标识符) 可将后台作业转至前台
ctrl+z 可将前台进程放到后台,并暂停运行
ps j 命令显示作业信息,如果进程状态是 T,表示暂停
bg %jobid 可以在后台继续运行作业
中断进程
使用信号控制进程
signals
指的是
发给进程的软件中断
,signals 向执行中的程序报告事件, 生成 signals 的事件可以使错误或者外部事件
以下是一些常见的 signals,可以被管理员使用:

一般 signals 分为三种类型:
- Term 立即关闭
- Core 保存程序的内存映像(核心转储),然后终止
- Stop 程序暂停运行,等待恢复运行
通过键盘发送 signals 的命令:
- 暂停 Ctrl-z ----stop 终止或等待恢复
- 中断 Ctrl-c ----term 立即终止并退出
- 核心转储 Ctrl-\ ---- core 程序保存内存映像,然后终止
- signal 可以通过名称(如 -HUP 或 -SIGHUP)或编号(如-1 或 -9)指定
- 使用 kill 命令来向进程发送 signals:(注意 kill 是向 PID 发送signals)
使用 kill 命令来向进程发送 signals :
- kill 命令可以向进程发送任何 signals
- kill -l 查看可以发生的 signals
- kill -signal

使用 killall 命令向多个进程发送 signals:(killall 可以匹配命令名称、特定用户的进程或系统的所有进程):

使用 pkill 可以向一个或多个符合选择条件的命令、UID 、 GID、子进程、 terminal 发送 signals:
以管理员身份注销用户
w 命令可以显示当前登录系统的用户:

其中 TTY 列显示用户的位置,pts/ 表示图形化终端,tty 表示文字界面终端
所有用戶登录会话都与某个终端设备 (TTY) 相关联
pkill -SIGKILL –u username 会强制中断某一用户的所有进程
注意:SIGKILL 常被滥用,无法挽救,太致命,而且容易不释放资源,所 以建议还是先 SIGTERM(15),然后尝试SIGINT (2) ,实在关不掉再SIGKILL(9)
可以借助父进程和子进程关系,进行选择性进程终止
监控进程活动
解读 load average
uptime
命令可以显示当前 load average(负载平均值),
lscpu
可以显示 cpu 数量。
将 load average 除以 cpu 数量,如果负载接近 1,表示 cpu 负载非常高

实时进程监控
top
命令默认每隔 5 秒刷新动态负载
top 还能输出:PID、进程所有者 USER、虚拟内存 VIRT、物理内存 RSS、 进程状态、CPU 时间 TIME(自启动以来总处理时间)、进程命令名称COMMAND