1. ps
显示系统进程瞬间的运行动态的命令ps
(1)选项:-A:所有的进程均显示出来,与 -e 具有同样的效果;
-a:显示现行终端机下的所有进程,包括其他用户的进程;
-u:以用户为主的进程状态;
-x:通常与 -a 一起使用,可列出完整信息;
输出格式规划:-l :较长,较详细的将该PID的信息列出;
(2)ps -ef
[root@WWcentos ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 14:30 ? 00:00:09 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 14:30 ? 00:00:00 [kthreadd]
root 4 2 0 14:30 ? 00:00:00 [kworker/0:0H]
root 6 2 0 14:30 ? 00:00:00 [ksoftirqd/0]
root 7 2 0 14:30 ? 00:00:00 [migration/0]
#UID:代表执行者身份;
#PID:进程的ID号;
#PPID:父进程的ID号;
#C:CPU使用的资源百分比;
#STIME:进程启动到现在的时间;
#TTY:登陆者的终端位置;
#TIME:使用掉的CPU的时间;
#CMD:所下达的指令名称;
(3)ps -aux
[root@WWcentos ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.7 128528 7176 ? Ss 14:30 0:09 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 14:30 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 14:30 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 14:30 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 14:30 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 14:30 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R 14:30 0:00 [rcu_sched]
#USER:该进程属于哪个使用者账号;
#PID:该进程的进程ID号;
#%CPU:该进程使用掉的CPU资源百分比;
#%MEM:该进程所占用的物理内存百分比;
#VSZ:该进程使用掉的虚拟内存量(字节 kbytes)
#RSS:该进程占用的固定内存量(字节 kbytes)
#TTY:该进程是在那个终端机上面运作,若与终端机无关,则显示 ? tty1-tty6是本机上面的 登入者程序 若为pts/0等等的,则表示为由网络连接进主机的程序
#STAT:该程序目前的状态:
R:该进程目前正在运作,或者是可被运作的;
S:该进程目前处在睡眠状态当中,但可被某些讯号(signal)唤醒;
T:该进程目前正在侦测或者是停止了;
Z:该程序已经终止,但是其父程序却无法正常的终止他,造成zombie(僵尸)程序的 状态
#START:该进程被触发启动的时间;
#TIME:该进程实际使用CPU运作的时间;
#COMMAND:该程序的实际指令;
2. pstree
用于查看进程树之间的关系,即哪个进程是哪个父进程,哪个子进程。
(1)命令选项:-p 同时列出每个进程的PID
(2)环境准备:安装pstree命令:
yum install psmisc-22.20-11.e17.x86_64
或者:
yum install epel-release
yum install htop
3. pgrep
通过pgrep来获得正在被调度的进程的相关信息,pgrep通过匹配其程序名,找到匹配的进程。
(1)命令选项:-l 同时显示进程名和PID
以apache为例(前提这个软件得先启用)
[root@WWcentos ~]# pgrep httpd
2371
2372
2373
2374
[root@WWcentos ~]# pgrep -l httpd
2371 httpd
2372 httpd
2373 httpd
2374 httpd
#pgrep命令用来查找进程的信息,通常会和pkill命令来连用,在指定条件下kill问题进程。
4. killall kill pkill
4.1 pkill
(1)pkill是ps命令和kill命令的结合,按照进程名来杀死指定进程。通常会和pgrep命令连用。
[root@localhost ~]# pgrep -l httpd
1438 httpd
1439 httpd
1440 httpd
1441 httpd
1442 httpd
1443 httpd
[root@localhost ~]# pkill httpd
[root@localhost ~]# pgrep -l httpd
[root@localhost ~]#
4.2 killall
(1)killall命令用于杀死指定名字的进程。
(2)命令:killall 进程名
以apache为例:
[root@localhost ~]# ps -ef |grep httpd
root 2264 1 0 20:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2265 2264 0 20:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2266 2264 0 20:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2267 2264 0 20:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2268 2264 0 20:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 2269 2264 0 20:28 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 2356 1321 0 20:40 pts/0 00:00:00 grep --color=auto httpd
[root@localhost ~]# killall httpd
[root@localhost ~]# ps -ef |grep httpd
root 2364 1321 0 20:41 pts/0 00:00:00 grep --color=auto httpd
4.3 kill
(1)kill命令用来终止指定的进程(terminate a process)的运行。通常,终止一个前台进程用ctrl+c ,对于后台进程就必须用kill命令来终止进程PID。kill命令是通过向进程发送指定的信号来结束进程的,在默认情况下采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程;对于那些可以捕捉该信号的进程就要用编号为9的kill信号强行杀掉该进程。
(2)kill命令的信号号码:
kill命令可以带信号号码选项,也可不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。
[root@localhost ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
注意:只有第九种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权限忽略。
常用信号:HUP 1 终端断线
INT 2 中断(只要能用ctrl+c退出的,都能使用kill -2 进程号 中断)
SIG 9 强制终止
TERM 15 终止
(3)kill -0 不发送任何信号,常用来检测进程是否存在。如果存在,可以通过 echo $? 拿到 值为0,否则值为1
以apache为例
[root@localhost ~]# pgrep -l httpd
1506 httpd
1507 httpd
1508 httpd
1509 httpd
1510 httpd
1511 httpd
[root@localhost ~]# kill -0 1506
[root@localhost ~]# echo $?
0
[root@localhost ~]# ps -ef |grep httpd
root 1506 1 0 10:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1507 1506 0 10:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1508 1506 0 10:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1509 1506 0 10:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1510 1506 0 10:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1511 1506 0 10:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
root 1516 1348 0 10:44 pts/0 00:00:00 grep --color=auto httpd
[root@localhost ~]# pkill httpd
[root@localhost ~]# kill -0 1506
-bash: kill: (1506) - No such process
[root@localhost ~]# echo $?
1
5. top
(1)动态地持续监控进程的状态。
[root@WWcentos ~]# top
top - 11:16:15 up 1:08, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 136 total, 1 running, 135 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 5.9 sy, 0.0 ni, 94.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 995676 total, 387172 free, 248724 used, 359780 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 596700 avail Mem
#第一行:
11:16:15 当前的系统时间;
up 1:08 系统已经运行了一小时8分钟,在此期间没有重启过;
1 user 当前有一个用户在登录系统;
load average 后面的三个数分别是1分钟、5分钟、15分钟的负载情况。数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。
#第二行:Tasks 任务进程:
系统现在共有137个进程,其中处于运行的有1个,135个在休眠(sleeping),stopped 停止状态的有0个,zombie状态(僵尸)的有0个。
#第三行:CPU状态:
0.0 us 用户空间占用CPU的百分比
5.9 sy 内核空间占用CPU的百分比
0.0 ni 改变过优先级的进程占用CPU的百分比
94.1 id 空闲CPU百分比
0.0 wa IO等待占用CPU的百分比
0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0 si 软中断(Software Interrupts)占用CPU的百分比
#第四行:运行内存状态
995676 total 物理内存总量(1GB)
387172 free 空闲内存总理(387M)
248724 used 使用的交换区总量(248M)
359780 buff/cache 缓存内存量(359M)
#第五行:swap 交换分区
2097148 total 交换区总量(2G)
2097148 free 空闲的交换区总量(2G)
0 used 使用的交换区总量(0M)
596700 avail Mem 缓冲的交换区总量(596M)
#第七行 各进程(任务)的状态监控
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 128256 6964 4192 S 0.0 0.7 0:01.99 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
5 root 20 0 0 0 0 S 0.0 0.0 0:00.17 kworker/u256:0
6 root 20 0 0 0 0 S 0.0 0.0 0:00.17 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
#PID 进行的标识号;
#USER 运行此进程的用户;
#PR 进程优先级;
#NI nice值。Linux支持的nice级别从19(最低 优先级)到 -20(最高 优先级),默认为0
#VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
#RES 进程使用的,未被换出的物理内存大小,单位kb。RES=CODE+DATA
#SHR 共享内存大小,单位kb。
#S 指进程的运行状态。S表示休眠,等待唤醒。
#%CPU 上次更新到现在的CPU时间占用百分比
#%MEM 进程使用的物理内存百分比
#TIME+ 进程使用的CPU时间总计,单位1/100秒
#COMMAND 进程名称(命令名/命令行)。如果COMMAND 为[defunct],则代表僵尸进程, 可用kill -9杀掉 .
(2) top 命令实现窗口排序(快捷键):
A start time
M %MEM 内存大小排序
N PID PID大小排序
P %CPU CPU使用率排序
T TIME+ 运行时间多少的排序
6. htop
(1)环境:安装epel源:
yum install httpd://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch
安装 htop:yum install htop
(2)实时监控画面:
#左上区域:显示了CPU,物理内存和交换分区的信息;
#右上区域:显示了任务数量,平均负载和连接运行时间等信息。
快捷键:
#F1 显示帮助信息;
#F2 配置界面中的显示信息;
#F3 按照进程名进行搜索进程,或者直接输入“/”。
#F4 过滤器,相当于模糊查找,不区分大小写,下方输入要搜索的内容。
#F5 以树形图方式显示。
#F6 排序方式,按下F6之后,按照自己的选择方式来排序。
#F7,F8 调整进程nice值,F7表示减小nice值(减小优先级),选择某一进程,按F7或者F8增 大或者减小nice值。
#F9 杀死进程,选择某一进程按F9即可杀死此进程。
#F10 退出htop
7. vmstat:
(1)展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。相比top,我们可以看到整个机器的CPU,内存,IO的使用情况。
(2)官方解释:
VMSTAT(8) Linux 系统管理员手册 VMSTAT(8)
NAME
vmstat - 报告虚拟内存的统计信息
总览
vmstat [-n] [延时[次数]]
vmstat [-V]
描述
vmstat 对系统的进程情况、内存使用情况、交换页和 I/O 块使用情况、 中断以及 CPU 使用情况进行统计并报告相应的信息。
第一个显示内容指出了计算机自上次重启至今的平均使用情况。 后面的每一行信息是按 延时 定期地显示系统的各部分信息。 进程信息和内存信息都是即时产生的。
选项
-n 开关令第一次的信息只显示一次而不是周期地产生。
延时 是以秒为单位的刷新时间间隔。 如果没有给出此延时时间,则仅显示系统启动至今的平均值。
次数 指的是更新的次数。 如果没有指定此数而又定义了延时时间,则次数的默认值是无穷次。
-V 开关可以用来输出该命令的版本信息。
输出信息简介
Procs
r: 等待运行的进程数
b: 处在非中断睡眠状态的进程数
w: 被交换出去的可运行的进程数。
此数由 linux 计算得出,但 linux 并不耗尽交换空间
Memory
swpd: 虚拟内存使用情况,单位:KB
free: 空闲的内存,单位KB
buff: 被用来做为缓存的内存数,单位:KB
Swap
si: 从磁盘交换到内存的交换页数量,单位:KB/秒
so: 从内存交换到磁盘的交换页数量,单位:KB/秒
IO
bi: 发送到块设备的块数,单位:块/秒
bo: 从块设备接收到的块数,单位:块/秒
System
in: 每秒的中断数,包括时钟中断
cs: 每秒的环境(上下文)切换次数
CPU
按 CPU 的总使用百分比来显示
us: CPU 使用时间
sy: CPU 系统使用时间
id: 闲置时间
(3)一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。
例如:vmstat 2 1 #2代表每两秒采集一次 1代表采集次数