本文探讨如何在 Linux 查看进程。
引言什么是进程呢?进程是程序的一个具体实现,是执行程序的过程。同一程序可以执行多次,每次都可以在内存中开辟独立的空间来装载,从而产生多个进程。
不同的进程还可以拥有各自的独立的输入输出接口。简单来说,一个运行中的程序就可以称为进程。一个运行中的程序,也很可能包含着多个进程。
Linux 是一个多任务的操作系统,系统上经常同时运行着多个进程。本文不关心进程的产生和运行,只讨论如何管理和控制进程。让他们能够很好地为用户服务。
要对进程进行控制管理,首先得查看当前进程的状态,占用了哪些资源等信息,这些信息对于系统管理员来说十分重要。
ps(Process Status 的缩写)命令是 Linux 中最常用,也是非常强大的进程查看命令,可以查看进程在当前时间点的状态。由于历史原因,ps 选项挺复杂的,兼容了好几种不同的系统格式语法格式,我们这里只讨论标准的 Linux 风格的用法。
用法 ps- 首先创建一个
bad.py
文件,里面写了一个死循环:
touch bad.py
vi bad.py # 写一个死循环,如:while True: pass,保存退出
- 运行
bad.py
:
python bad.py
- 新建一个终端窗口,
ps -A
列出系统中所有的进程。输出内容的每行均代表一个进程,每行有四个字段,其定义如下:
ps -A
- PID:进程 ID
- TTY:进程使用的终端(问号表示进程不占用终端)
- TIME:进程运行持续时间
- CMD:进程运行对应的程序名
- 但是我们没有看到我们想要看到的关键信息,即进程占 CPU 计算资源的比例。使用
ps -Af
可以列出进程更加完整的信息。
- UID:表示进程是由哪个用户运行的
- PPID:进程父进程的 PID
- C:进程占用主机 CPU 计算资源的比例
- STIME:进程开始运行的时间
- 从上述输出信息中,我们发现了一行占用 CPU 资源为 94% 的进程。很明显,这就是我们的罪魁祸首了。
root 3422 31088 94 21:55 pts/1 00:09:19 /root/.pyenv/versions/3.9.0b5/bin/python bad.py
- 使用
kill
命令结合进程的PID
来终止这个罪魁祸首。
kill 3422
- 终止之后,可以发现另一个执行
bad.py
文件的窗口也出现了Terminated
字样,再次验证了进程确实被终止了。
[root@centos ~]# python bad.py
Terminated
top
除了 ps 外,Linux 还提供了另一个监视系统的工具:top。与 ps 不同,top 是动态监视系统进程的工具,而 ps 是静态的。默认情况下,top 命令每三秒刷新一次。
top 界面分为两部分。光标上面的部分显示关系系统整体的性能,下面的部分显示各进程信息。光标所在处用于输入操作命令。第二部分的各个字段定义如下:
- PID:进程 ID
- USER:进程发起者
- PR:进程优先级
- NI:Nice 值
- VIRT:进程使用的虚拟内存总量(单位:KB)
- RES:进程使用的未被换出的物理内存大小(单位:KB)
- SHR:共享内存大小(单位:KB)
- S:进程运行状态
- %CPU:上次更新到现在的 CPU 时间占用百分比
- %MEM:进程使用物理内存所占百分比
- TIME+:进程使用的 CPU 时间总计(单位:1/100秒)
- COMMAND:产生进程的命令名称
默认进入 top 时,进程按照 CPU 占用量降序排序。常用的操作 top 面板的命令如下:
M
:按内存占用量降序排序N
:按进程 PID 降序排序P
:回到按 CPU 占用量降序排序R
:在当前基础上反向排序:向左或向右改变排序关键字
q
:退出 top
中国大学 MOOC | Linux 系统管理 | 主题 10 管好进程和服务 | 小节 1 查看进程