Linux中的进程管理------ps,job
什么是进程?
进程是正在执行的程序的实例。每个进程都有独立的地址空间、资源分配和执行状态。理解进程管理是Linux系统管理的核心技能。
进程与程序的区别
程序:存储在磁盘上的可执行文件(静态)
进程:程序在内存中的执行实例(动态)
进程查看命令:ps
ps是查看进程常用的工具,不过他是查看进程瞬间的状态,不能实时监控
ps aux #查看命令最全面的命令
#另一种形式:
ps -ef
#自定义字段查看
ps -o pid #只查看pid这个参数
参数详解:
a #显示所有终端进程
u #显示用户相关信息
x #显示与终端无关的进程
ps aux #显示所有进程信息
实战示例:
输出字段解析:
USER:进程所有者
PID:进程ID(唯一标识)
%CPU:CPU使用百分比
%MEM:内存使用百分比
VSZ:虚拟内存大小(KB)
RSS:物理内存大小(KB)
TTY:关联的终端
STAT:进程状态
START:启动时间
TIME:累计CPU时间
COMMAND:命令名称
进程状态(STAT)详解:
R:运行中或可运行
S:可中断的睡眠状态
D:不可中断的睡眠状态
T:已停止
Z:僵尸进程
<:高优先级
N:低优先级
I:休闲状态
free-内存信息查看
free -h #可读模式,推荐
#指定单位
free -m #MB
free -g #GB
free运行实例:
free结果字段详解:
第一行:表头
这一行描述了下面每一列数据的含义。
total:内存总量。
used:已使用的内存。
free:完全未被使用的内存。
shared:主要被
tmpfs
(临时文件系统)使用的内存。buff/cache:被内核缓冲区(buffer)和页面缓存(cache)占用的内存。
available:估算的、可供应用程序使用的内存大小(这是关键指标!)。
第二行:物理内存
第三行:交换空间(Swap)
Swap 是硬盘上的一块区域,当物理内存不足时,系统会将内存中不常用的数据暂时挪到 Swap 中,从而为急需内存的程序腾出空间。
注:如果userd这个值持续增长,说明物理内存已经不足,系统开始频繁使用硬盘来交换数据,这会严重拖慢系统性能。
Linux实时监控进程--top
我之前有博客专门说过这个进程了,感兴趣的可以看一下
进程控制实战:
jobs----查看后台运行作业
# 基本语法
jobs [选项]# 常用选项
jobs -l # 显示详细信息(包括进程ID)
jobs -p # 只显示进程ID
jobs -r # 只显示运行中的作业
jobs -s # 只显示暂停的作业
实例:
输出解读:
[1]
:作业号,用%1
引用-
/+
:+
表示当前作业,-
表示前一个作业1841:进程ID
running
:作业状态(running-运行中, stopped-已暂停)&
:不是命令参数,而是shell的特殊符号,表示"在后台运行此命令"
fg
- 前台恢复作业
# 基本语法
fg [%作业号]# 示例
fg %1 # 将作业1调到前台
fg # 不指定作业号时,操作当前作业(带+号的)
实例:
Ctrl+Z
- 暂停进程
# 使用方法:在前台运行程序时按下
vim file.txt # 启动vim
Ctrl+Z # 暂停vim,返回shell
实例:
bg
- 后台继续运行:
# 基本语法
bg [%作业号]# 示例
bg %1 # 让作业1在后台继续运行
bg # 让当前作业在后台继续运行
实例:
这是我用刚刚的命令做的例子
为什么需要 jobs
?—— “作业控制” 的价值
jobs
命令是 Shell “作业控制” 功能的一部分,它的存在是为了让你能方便地管理你在当前这个终端窗口里启动的任务。
举例:
想象一下这个非常常见的场景:
你在终端里启动一个耗时很长的任务,比如
tar -czf backup.tar.gz /large_directory
。它运行了很久,你等不及了,想先做点别的事情。
你按下
Ctrl + Z
。这个命令会暂停 前台任务。现在,你的命令行回来了。你可以运行其他命令,比如
ls
,cat
等。此时,你怎么知道刚才那个压缩任务怎么样了?
你用
ps aux | grep tar
?可以,但你需要记住命令名,而且输出里会混杂其他用户的tar
进程,很不方便。你输入
jobs
。 它会立刻显示:[1]+ Stopped tar -czf backup.tar.gz /large_directory
清晰明了地告诉你,作业编号
[1]
是暂停状态。
现在你想让它继续在后台运行,不占用你的命令行。你只需要输入:
bg %1
。再用
jobs
查看,状态变成了Running
。[1]+ Running tar -czf backup.tar.gz /large_directory &
过了一会儿,你又想把它调回前台看看进度,输入
fg %1
。
在这个完整的流程中,jobs
, bg
, fg
命令构成了一个完美的闭环,让你能轻松地在同一个会话中管理多个任务。
表格对比:
特性 | ps aux (Process Status) | jobs (Shell Jobs) |
---|---|---|
查看范围 | 整个系统的所有进程,无论由谁启动。 | 当前 Shell 会话直接启动或控制的后台任务(作业)。 |
所属关系 | 与当前 Shell 无关。可以看到其他用户、其他终端启动的进程。 | 严格属于当前这个 Shell。你在这个终端里启动的任务。 |
信息详细度 | 非常详细。PID、用户、CPU/内存占用、启动命令、状态等。 | 非常简洁。作业编号、状态、启动的命令。 |
主要用途 | 系统监控、进程管理。查看所有进程的资源占用,定位问题,用 kill 结束进程。 | 作业控制。在同一个终端会话内,管理前后台任务的切换、暂停、恢复。 |
依赖关系 | 进程之间是独立的(虽然有父子关系)。 | 作业与当前 Shell 强关联。如果关闭这个终端,这些作业通常会收到 SIGHUP 信号而终止。 |
注:
jobs
不是 ps
的简化版,而是 ps
的“场景特化版”
jobs只负责当前终端会话窗口,ps负责所有用户管理