Linux进程查看及管理的工具:pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup
linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)
ps工具标识进程的状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
+:前台进程
l:多线程进程
L:内存 分页并带锁
N:低优先级进程
<:高优先级进程
s:session leader,会话子进程发起者
pstree
pstree命令以树状图的方式展现进程之间的派生关系(“{}”表示线程)
选项:
-a:显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-c:不使用精简标示法;
-G:使用VT100终端机的列绘图字符;
-h:列出树状图时,特别标明现在执行的程序; -H<程序识别码>:此参数的效果和指定"-h"参数类似,但特别标明指定的程序; -l:采用长列格式显示树状图;
-n:用程序编号排序。预设是以程序名称来排序;
-p:显示程序识别码;
-u:显示用户名称;
-U:使用UTF-8列绘图字符;
-V:显示版本信息。
ps
命令功能:
用来显示当前进程的状态
参数
a 显示所有进程
-a 显示同一终端下的所有程序
-A 显示所有进程
-N 忽略选择。
-d 显示所有进程,但省略所有的会话引线(utility)
-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)
-p pid 进程使用cpu的时间
c 显示进程的真实名称
-N 反向选择
-e 等于“-A”
f 显示程序间的关系
-H 显示树状结构
r 显示当前终端的进程
T 显示当前终端的所有程序
u 指定用户的所有进程
--help 显示帮助信息
--version 显示版本显示
U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility)
-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.
-l 长格式(有F,wchan,C 等字段)
-j 作业格式
v 以虚拟存储器格式显示
s 以信号格式显示
-m 显示所有的线程
-H 显示进程的层次(和其它的命令合用,如:ps -Ha)(utility)
e 命令之后显示环境(如:ps -d e; ps -a e)(utility)
h 不显示第一行
k| --sort 属性 对属性排序
k %mem 对mem使用率排序
-o 用户自定义格式。
pid 、comm(cmd) 、%cpu 、%mem 、state 、tty 、euser、user(有效用户) 、ruser(真实用户)、euser(==user为生效用户),psr为cpu使用数量
-au 显示较详细的资讯
-aux 显示所有包含其他使用者的行程
-C<命令> 列出指定命令的状况
ps -C f1.sh 列出f1.sh的信息
--lines<行数> 每页显示的行数
--width<字符数> 每页显示的字符数
显示优先级
ni:nice值
pri:priority 优先级
psr:processor CPU编号
rtprio:实时优先级
示例:
ps axo pid,cmd,psr,ni,pri,rtprio (rtprio超出99的不显示)
- nice指定命令优先级:
nice [OPTION] [COMMAND [ARG]...]
nice -n --20 ping 127.0.0.1 修改ping的nice优先级为-20
-
renice修改命令优先级:
renice [-n] priority pid...renice -n -20 ping 127.0.0.1 修改ping的renice优先级为20 renice -5 ping 127.0.0.1 修改ping的renice优先级为-5 renice 5 ping 127.0.0.1 修改ping的renice优先级为5
查看:
ps axo pid,comm,ni
- ps命令常用用法(方便查看系统进程)
1)ps a 显示现行终端机下的所有程序,包括其他用户的程序。
2)ps -A 显示所有进程。
3)ps c 列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
4)ps -e 此参数的效果和指定"A"参数相同。
5)ps e 列出程序时,显示每个程序所使用的环境变量。
6)ps f 用ASCII字符显示树状结构,表达程序间的相互关系。
7)ps -H 显示树状结构,表示程序间的相互关系。
8)ps -N 显示所有的程序,除了执行ps指令终端机下的程序之外。
9)ps s 采用程序信号的格式显示程序状况。
10)ps S 列出程序时,包括已中断的子程序资料。
11)ps -t<终端机编号> 指定终端机编号,并列出属于该终端机的程序的状况。
12)ps u 以用户为主的格式来显示程序状况。
13)ps x 显示所有程序,不以终端机来区分。
常用组合:-ef
-e:显示所有进程
-f:显示完整格式程序信息
常用组合:-eFH
-F:显示更完整格式的进程信息
-H:以进程层级格式显示进程相关信息
常用组合:自定义(参数‘o’在最后)
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm k %mem
psaxo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,cmd k %cpu
ps -C f1.sh o pid cmd user ruser %cpu psr ni
查看f1.sh命令的pid等信息,user为有效用户,ruser为真实用户 psr为cpu的使用
- ps aux输出如下:
- Head标头:
USER 用户名
UID 用户ID(User ID)
PID 进程ID(Process ID)
PPID 父进程的进程ID(Parent Process id)
SID 会话ID(Session id)
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 系统所允许进程使用的虚存的大小(Virtual Size)
RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
TTY 与进程关联的终端(tty)
STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
R 运行 Runnable (on run queue),正在运行或在运行队列中等待。
S 睡眠 Sleeping休眠中, 受阻, 在等待某个条件的形成或接受到信号。
I 空闲 Idle
Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
T 终止 Terminate进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
P 等待交换页
W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。
X 死掉的进程
< 高优先级进程 高优先序的进程
N 低优先级进程 低优先序的进程
L 内存锁页 Lock有记忆体分页分配并缩在记忆体内
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+ 位于后台的进程组
START 进程启动时间和日期
TIME 进程使用的总cpu时间
COMMAND 正在执行的命令行命令
NI 优先级(Nice)
PRI 进程优先级编号(Priority)
WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
FLAGS 与进程相关的数字标识
pgrep
pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。
pgrep(选项)(参数)
选项
-o:仅显示找到的最小(起始)进程号;
-n:仅显示找到的最大(结束)进程号;
-l:显示进程名称;
-g:指定进程组;
-t:指定开启进程的终端;
-u:指定进程的有效用户ID。
-U uid: real user,真正发起运行命令者
-P pid:显示指定进程的子进程
-a:显示完整格式的进程名
参数
进程名称:指定要查找的进程名称,同时也支持类似grep指令中的匹配模式。
示例:
pgrep -au danran
pgrep -aU danran
pgrep -at tty2 显示tty2终端的进程
pgrep -lt tty2 显示tty2终端的进程
pgrep -P 5998 显示编号5998进程的信息
pidof:显示指定进程的编号,可判断该进程是否存在
uptime
uptime命令主要用于获取主机运行时间和查询linux系统负载等信息。uptime命令可以显示系统已经运行了多长时间,信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
14:34:55 //系统当前时间
up 2:45, //主机已运行时间,时间越大,说明你的机器越稳定。
4 user //用户连接数,是总连接数而不是用户数
load average // 系统平均负载,统计最近1,5,15分钟的系统平均负载
系统平均负载是指在特定时间间隔内运行队列中的平均进程数。
如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能是良好的。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。
如果你的linux主机是1个双核CPU的话,当Load Average 为6的时候说明机器已经被充分使用了。
top
top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。
语法 top(选项)
选项
-b:显示所有进程;
-c:显示完整的子命令;
-d #:指定刷新间隔时间,默认为3s;
-n #:刷新#次之后退出。
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
top内置交互命令
h:显示帮助画面,给出一些简短的命令总结说明;
i:忽略闲置和僵死进程,这是一个开关式命令;
r:重新安排一个进程的优先级别;
S:切换到累计模式;
f或者F:从当前显示中添加或者删除项目;
o或者O:改变显示项目的顺序;
s:修改刷新时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是3s;
k:终止一个进程;
q:退出程序;
w:将当前设置写入~/.toprc文件中。
首部信息显示
l:切换显示平均负载和启动时间信息;
m:切换显示内存信息;
t:切换显示进程和CPU状态信息;
c:切换显示命令名称和完整命令行;
1:cpu分别显示
排序
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
栏位信息简介
us:用户空间
sy:内核空间
ni:调整nice 时间
id:空闲
wa:等待IO 时间
hi:硬中断
si:软中断(模式切换)
st:虚拟机偷走的时间
- top输出如下:
top
14:42:59 当前系统时间
2:42 系统已经运行了16天
4 user 4个用户当前登录
load average: 0.03 0.03 0.05 系统负载,即任务队列的平均长度
Tasks:
155 total 总进程数
1 running 正在运行的进程数
154 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 冻结进程数
%Cpu(s):
0.1 us 用户空间占用CPU百分比
0.1 sy 内核空间占用CPU百分比
0.0 ni 用户进程空间内调整优先级的进程占用CPU百分比
0.2 id 空闲CPU百分比
0.0 wa 等待输入输出的CPU时间百分比
0.0 hi 硬中断
0.0 si 软中断
0.0 st 虚拟机偷走的时间
Mem:
999936 total 物理内存总量
376792 free 使用的物理内存总量
262580 used 空闲内存总量
360564 buffers/cache 用作内核缓存的内存量
Swap:
2047996 total 交换区总量
2047996 free 空闲交换区总量
0 used 使用的交换区总量
541052 avail Mem
htop 命令:需从Fedora-EPEL 源安装
http://172.16.0.1/fedora-epel/7/x86_64
yum -y install htop
选项:
-d #:指定延迟时间;
-u UserName:仅显示指定用户的进程
-s COLUME:以指定字段进行排序
子命令:
s:跟踪选定进程的系统调用
l:显示选定进程打开的文件列表
a:将选定的进程绑定至某指定CPU核心
t:显示进程树
vmstat
vmstat 命令:虚拟内存信息
vmstat [options] [delay [count]]
vmstat 2 5
procs:
r:可运行(正运行或等待运行)进程的个数,和核心数有关
b:处于不可中断睡眠态的进程个数( 被阻塞的队列的长度)
vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:
vmstat 2 1 2s采集一次服务器状态,采集一次
- vmstat输出显示如下:
memory:
swpd: 交换内存的使用总量
free:空闲物理内存总量
buffer:用于buffer 的内存总量
cache:用于cache 的内存总量
swap:
si:从磁盘交换进内存的数据速率(kb/s),以内存为参考点
so:从内存交换至磁盘的数据速率(kb/s),以内存为参考点
io:
bi:从块设备读入数据到系统的速率(kb/s),以内存为参考点
bo:保存数据至块设备的速率,以内存为参考点
system:
in:interrupts 中断速率,包括时钟
cs:context switch 进程切换速率
cpu:
us:Time spent running non-kernel code
sy:Time spent running kernel code
id:Time spent idle. Linux 2.5.41 前, 包括IO-wait time.
wa:Time spent waiting for IO. 2.5.41 前,包括in idle.
st:Time stolen from a virtual machine. 2.6.11 前, unknown.
选项:
-s:显示内存的统计数据
vmstat -s 2 1 显示内存的统计信息,只采集一次
iostat:
-
ostat主要用于监控系统设备的IO负载情况
用法
iostat [参数] [时间] [次数
参数:
-c 显示CPU使用情况
-d 显示磁盘使用情况
-k 以KB为单位显示
-m 以M为单位显示
-N 显示磁盘阵列(LVM) 信息
-x 显示详细信息
示例:iostat 1 10
tps:每秒的传输次数
kB_read/s:每秒从设备(drive expressed)读取的字节;
kB_wrtn/s:每秒向设备(drive expressed)写入的字节;
kB_read:读取的总数据量;
kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes。
pmap 命令:
- pmap命令用于报告进程的内存映射关系,是Linux调试及运维一个很好的工具。
语法 pmap(选项)(参数)
pmap [options] pid [...]
选项
-x: 显示详细格式的信息;
-d:显示设备格式;
-q:不显示头尾行;
-V:显示指定版本。
参数
进程号:指定需要显示内存映射关系的进程号,可以是多个进程号。
示例:pmap 1 输出的内容为/proc/PID/maps中的内容
-
另外一种实现:
cat /proc/PID/maps
输出的内容为pmap 1
glances
查看远程设备的进程信息
使用该工具时需要关闭防火墙
glances 命令:EPEL源
客户端和服务端都需要安装glances工具
http://172.16.0.1/fedora-epel/7/x86_64 epel源
yum -y install glances
-
C/S 模式下运行glances命令
服务器模式(被监听者):
glances -s -B 172.17.0.100(IPADDR)
IPADDR:指明监听的服务器本机IP地址
防火墙打开glances工具开启的端口号
客户端模式:
glances -c IPADDR
IPADDR:要监听的服务器端地址
- glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P
password] [--password] [-t refresh] [-f file] [-o output]
常用选项:
-b:以Byte为单位显示网卡数据速率
-d:关闭磁盘I/O模块
-f /path/to/somefile:设定输入文件位置
-o {HTML|CSV}:输出格式
-m:禁用mount 模块
-n:禁用网络模块
-t #:延迟时间间隔,默认为2s
-1:每个CPU
-B @IP|host:绑定服务器端 IP 地址或者主机名称
-c @IP|host:连接 glances 服务器端
-C file:设置配置文件默认是 /etc/glances/glances.conf
-e:显示传感器温度
-p PORT:设置运行端口默认是 61209
-P password:设置客户端 / 服务器密码
-s:设置 glances 运行模式为服务器
-h: 显示帮助信息
-v: 显示版本信息
内建命令:
a Sort processes automatically
c Sort processes by CPU%
m Sort processes by MEM%
p Sort processes by name
i Sort processes by I/O rate
d Show/hide disk I/O stats
f Show/hide file system stats
n Show/hide network stats
s Show/hide sensors stats
y Show/hide hddtemp stats
l Show/hide logs
b Bytes or bits for network I/O
w Delete warning logs
x Delete warning and critical logs
1 Global CPU or per-CPU stats
h Show/hide this help screen
t View network I/O as combination
u View cumulative network I/O
q Quit (Esc and Ctrl-C also work)
kill命令
- 向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头(可省略),不区分大小写
格式
kill(选项)(参数)
kill [ -s signal | -p ] [ -a ] pid ...
kill -l [ signal ]
选项
-s:指定发送的信号。
-p:模拟发送信号。
-l:指定信号的名称列表。
-a:当处理当前进程时,不限制命令名和进程号的对应关系;
-u:指定用户。
pid:要中止进程的ID号。
Signal:表示信号。
参数
进程或作业识别号:指定要删除的进程或作业
- 显示当前系统可用信号: kill –l,trap -l
常用信号:man 7 signal
1) SIGHUP: 无须关闭进程而让其重读配置文件
2) SIGINT: 中止正在运行的进程;相当于Ctrl+c
3) SIGQUIT:相当于ctrl+\
9) SIGKILL:强制杀死正在运行的进程
15) SIGTERM:终止正在运行的进程(默认为15)
18) SIGCONT:继续运行
kill -18 3298 将进程ID为3298的程序继续后台运行,停止后台休眠
19) SIGSTOP:后台休眠
kill -19 3298 将进程ID为3298的程序放后台休眠
指定信号的方法:
(1)信号的数字标识:1,2,9
(2)信号完整名称:SIGHUP
(3)信号的简写名称:HUP
- 按PID :kill [-SIGNAL] pid …
kill –n SIGNAL pid;kill –s SIGNAL pid
kill -9 1200
- 按名称:killall [-SIGNAL] comm…
killall -9 bash 杀死bash程序的所有进程
- 按模式:pkill [options] pattern
-SIGNAL
-u uid:effective user,生效者
-U uid: real user,真正发起运行命令者
-t terminal:与指定终端相关的进程
kill -t /dev/pts/1 杀死/dev/pts/1终端的进程
-l:显示进程名(pgrep可用)
-a:显示完整格式的进程名(pgrep 可用)
-P pid: 显示指定进程的子进程