文章目录
一、ps命令
ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息
用法: ps [选项]
选项:
- -A:所有的进程均显示出来,与 -e 具有同样的效用;
- -a: 只显示现行终端机下的所有进程,包括其他用户的进程;
- a:显示一个终端的所有进程,除会话引线外;
- -u:以用户为主的进程状态 (也可不加-)
- x:显示没有控制终端的进程;
- -e:显示所有进程
输出格式选项:
- l :较长、较详细的将该PID 的的信息列出(也可不加-)
- j :工作的格式 (jobs format)
- -f :做一个更为完整的输出。
可以看到,ps 命令有些与众不同,它的部分选项不能加入"-",比如命令"ps aux",其中"aux"是选项,但是前面不能带“-”
执行 “man ps” 命令,则会发现 ps 命令的帮助为了适应不同的类 UNIX 系统,可用格式非常多,不方便记忆。所以,建议大家记忆几个固定选项即可。比如:
ps aux
可以查看系统中所有的进程;ps -le
可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;ps -l
只能看到当前 Shell 产生的进程;
其实有这三个命令就足够了
【例 1】
ps aux
查看系统中所有的进程
[dxk@admin ~]$ ps -aux
#查看系统中的所有进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 0.3 128000 6660 ? Ss 09:16 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 09:16 0:00 [kthreadd]
root 3 0.1 0.0 0 0 ? S 09:16 0:02 [kworker/0:0]
root 4 0.0 0.0 0 0 ? S< 09:16 0:00 [kworker/0:0H]
root 5 0.0 0.0 0 0 ? S 09:16 0:00 [kworker/u256:0]
root 6 0.0 0.0 0 0 ? S 09:16 0:00 [ksoftirqd/0]
…省略部分输出…
说明以上输出信息中各列的具体含义:
表头 | 含义 |
---|---|
USER | 该进程是由哪个用户产生的 |
PID | 进程的ID |
%CPU | 该进程占用CPU资源的百分比,占用的百分比越高,进程越耗费资源 |
%MEM | 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源 |
VSZ | 该进程占用虚拟内存的大小,默认单位为KB |
RSS | 该进程占用实际物理内存的大小 ,默认单位为KB |
TTY | 该进程是在哪个终端上运行的。其中tty1~tty7代表本地控制台终端(tty7是图形化终端),pts0—pts255代表伪终端,一般是远程连接的终端 |
STAT | 进程状态。-Z:僵尸进程;-S:该进程处于睡眠状态,可被唤醒;-D:不可被唤醒的睡眠状态;-R:该进程正在运行… |
START | 该进程启动的时间 |
TIME | 该进程占用CPU的运算时间,而不是系统时间 |
COMMAND | 产生此进程的的命令名 |
【例 2】
ps -le
命令也能看到系统中所有的进程。由于 “-l” 选项的作用,所以 ps -le
命令能够看到更加详细的信息,比如父进程的 PID、优先级等。但是这两个命令的基本作用是一致的
[dxk@admin ~]$ ps -le
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 32000 ep_pol ? 00:00:03 systemd
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd
1 S 0 3 2 0 80 0 - 0 worker ? 00:00:03 kworker/0:0
1 S 0 4 2 0 60 -20 - 0 worker ? 00:00:00 kworker/0:0H
1 S 0 5 2 0 80 0 - 0 worker ? 00:00:00 kworker/u256:0
……省略部分输出信息……
说明以上输出信息中各列的具体含义:
表头 | 含义 |
---|---|
F | 进程标志,说明进程的权限,常见的标志有两个。1:进程可以被复制,但不能执行 4:进程使用超级用户权限 |
S | 进程状态,和ps aux命令输出内容中的STAT一致 |
UID | 运行此进程的用户ID |
PID | 进程的ID |
PPID | 父进程的ID |
C | 该进程的CPU使用率,单位是百分比 |
PRI | 进程的优先级,数值越小该进程的优先级越高,越早被CPU执行 |
NI | Nice值, 可通过修改其值调整进程的优先级 |
ADDR | 该进程在内存的哪个位置 |
SZ | 该进程占用的内存大小 |
WCHAN | 该进程是否在运行。“-”代表在运行 |
TTY | 该进程在哪个终端上个运行 |
TIME | 该进程占用CPU的时间,不是系统时间 |
CMD | 产生此进程的命令名 |
【例 3】如果不想看到所有的进程,只想查看一下当前shell产生了哪些进程,那只需使用 “ps -l” 命令就足够了
[dxk@admin ~]$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1640 1639 0 80 0 - 28917 do_wai pts/1 00:00:00 bash
0 R 1000 1735 1640 0 80 0 - 38337 - pts/1 00:00:00 ps
可以看到,是在 pts/1 伪终端登录,且只产生了两个进程:一个是登录之后生成的 Shell,也就是 bash;另一个是正在执行的 ps 命令
僵尸进程的产生一般是由于进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中,这就是僵尸进程。僵尸进程会对主机的稳定性产生影响,所以,在产生僵尸进程后,一定要对产生僵尸进程的软件进行优化,避免一直产生僵尸进程;对于已经产生的僵尸进程,可以在查找出来之后强制中止
关于top命令和ps命令进程状态输出:
值 | 含义 |
---|---|
D | 不可中断,进程处于Uninterruptable sleep状态 (usually IO) |
R | 正在运行,或在队列中的进程,进程处于RUNNING状态 |
S | 处于休眠状态,进程处于interruptable sleep状态 |
T | 停止或被追踪,进程处于STOPPED状态 |
Z | 僵尸进程,进程处于ZOMBIE状态 |
W | 进入内存交换(从内核2.6开始无效) |
X | 死掉的进程 |
< | 高优先级 |
N | 低优先级 |
L | 有些页被锁进内存 |
s | 包含子进程 |
+ | 位于后台的进程组; |
l | 多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do) |
二、top命令
实时监控系统处理器状态的命令 top
ps 命令可以一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,并且,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率的。
为此,Linux 提供了 top 命令。top 命令可以动态地持续监听进程地运行状态,与此同时,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。
通过top命令查看系统的CPU、内存、运行时间、交换分区、执行的线程等信息。通过top命令可以有效的发现系统的缺陷出在哪里。是内存不够、CPU处理能力不够、IO读写过高…
用法: top [选项]
选项:
- -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
- -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
- -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
- -p 进程PID:仅查看指定 ID 的进程;
- -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
- -u 用户名:只监听某个用户的进程;
- -o [+/-] fieldname:以表头的某个选项排序,+代表所有进程根据该选项从大到小排序(+是默认的),-代表从小到大排序)
在 top 命令的显示窗口中,还可以使用如下按键,进行交互操作:
- ? 或 h:显示交互模式的帮助;
- P:按照 CPU 的使用率排序,默认就是此选项;
- M:按照内存的使用率排序;
- N:按照 PID 排序;
- T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
- k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
- r:按照 PID 给某个进程重设优先级(Nice)值;
- q:退出 top 命令;
我们看看 top 命令的执行结果,如下:
top - 10:29:47 up <