linux进程查看及管理工具
我们常用的进程管理工具有:
pstree, ps, pidof, pgrep, top, htop, glance,dstat
linux系统各进程的相关信息都保存于/proc/PID目录下的各文件中:
[root@www ~]# cd /proc/ [root@www proc]# ls 1 1454 1781 23 272 31 6066 buddyinfo kcore sched_debug 10 1470 18 24 273 32 6067 bus keys schedstat 1001 15 1806 25 274 33 6332 cgroups key-users scsi 1002 1507 1820 258 275 34 6388 cmdline kmsg self 1003 1509 1834 259 276 357 6394 cpuinfo kpagecount slabinfo 1004 1537 1853 26 277 359 6397 crypto kpageflags softirqs 1005 154 1855 260 278 376 6417 devices loadavg stat 1006 1547 1857 261 279 377 7 diskstats locks swaps 1012 1548 1859 262 280 4 79 dma mdstat sys 1094 155 1861 263 281 42 8 driver meminfo sysrq-trigger 11 156 1863 264 282 43 80 execdomains misc sysvipc 12 1592 1868 265 283 45 866 fb modules timer_list 13 16 19 266 284 46 9 filesystems mounts timer_stats 1332 1601 1935 267 285 463 929 fs mpt tty 1362 161 2 268 286 47 930 interrupts mtd uptime 14 1617 20 269 287 4753 942 iomem mtrr version 1407 162 2052 27 29 5 944 ioports net vmallocinfo 1438 1677 21 270 3 5848 acpi irq pagetypeinfo vmstat 1449 17 22 271 30 6 asound kallsyms partitions zoneinfo
/proc/里每个数字目录代表一个进程号,而目录里则为相对进程的进程文件,每一个进程信息都通过/proc/PID/cmdline来获得
pstree:
pstree -diplay a tree of processes #以树形结构显示进程
这里要注意的是CentOS 6 和CentOS 7 显示不同
[root@www 1]# pstree#CentOS 6的进程信息,显示为init init─┬─NetworkManager─┬─dhclient │ └─{NetworkManager} ├─abrtd ├─acpid ├─atd ├─auditd───{auditd} ├─automount───4*[{automount}] ├─console-kit-dae───63*[{console-kit-da}] ├─crond ├─cupsd
[root@localhost ~]# pstree#CentOS 7则显示为systemd systemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─3*[{NetworkManager}] ├─2*[abrt-watch-log] ├─abrtd ├─accounts-daemon───2*[{accounts-daemon}] ├─alsactl ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon} │ └─3*[{at-spi-bus-laun}] ├─at-spi2-registr───{at-spi2-registr} ├─atd
ps: process state 查看进程状态
-report a snapshot of the current processes 显示当前进程信息的快照
常用组合:aux
u: 以用户为中心组织进程状态信息显示
a: 与终端相关的进程;
x: 与终端无关的进程;
[root@www proc]# ps aux#显示所有用户进程的详细情况 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.1 19356 1620 ? Ss Sep01 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S Sep01 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Sep01 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S Sep01 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S Sep01 0:00 [stopper/0] root 6 0.0 0.0 0 0 ? S Sep01 0:00 [watchdog/0] root 7 0.0 0.0 0 0 ? S Sep01 0:37 [events/0] root 8 0.0 0.0 0 0 ? S Sep01 0:00 [cgroup] root 9 0.0 0.0 0 0 ? S Sep01 0:00 [khelper]
以上按序为:
当前用户,进程号,cpu使用率,内存使用率,虚拟内存大小,常驻内存集,终端,进程状态,启动时间,启动累计时间,运行的命令
VSZ: Virtual memory SiZe,虚拟内存集
RSS: ReSident Size, 常驻内存集
STAT:进程状态
R:running #正在运行
S: interruptable sleeping #可中断睡眠
D: uninterruptable sleeping#不可中断睡眠
T: stopped#运行停止
Z: zombie#僵死状态
+: 前台进程
l: 多线程进程
N:低优先级进程
<: 高优先级进程
s: session leader#领导会话,
root 1861 0.0 0.0 4064 540 tty5 Ss+ Sep01 0:00 /sbin/mingetty /dev/tty5
root 1863 0.0 0.0 4064 540 tty6 Ss+ Sep01 0:00 /sbin/mingetty /dev/tty6
root 1868 0.0 0.3 577708 3188 ? Sl Sep01 0:00 /usr/sbin/console-kit-da
root 1935 0.0 0.1 108336 1788 tty1 Ss+ Sep01 0:00 -bash
root 2052 0.0 0.4 52772 4436 ? S Sep01 0:01 /usr/libexec/polkit-1/po
root 4753 0.0 0.1 114644 1120 ? Ss 01:30 0:00 /usr/sbin/abrtd
root 6332 0.0 0.1 9120 1572 ? S 06:03 0:00 /sbin/dhclient -d -4 -sf
root 6394 0.0 0.4 100448 4408 ? Rs 06:07 0:00 sshd: root@pts/0
root 6397 0.0 0.1 108340 1784 pts/0 Ss 06:07 0:00 -bash
postfix 6449 0.0 0.3 81408 3832 ? S 06:20 0:00 pickup -l -t fifo -u
root 6484 0.0 0.0 0 0 ? S 06:34 0:00 [flush-253:0]
root 6495 0.0 0.1 110240 1120 pts/0 R+ 06:39 0:00 ps aux
常用组合:-ef
-e: 显示所有进程
-f: 显示完整格式程序信息
[root@www proc]# ps -ef | head#查看所有进程的前十行 UID PID PPID C STIME TTY TIME CMD root 1 0 0 Sep01 ? 00:00:01 /sbin/init root 2 0 0 Sep01 ? 00:00:00 [kthreadd] root 3 2 0 Sep01 ? 00:00:00 [migration/0] root 4 2 0 Sep01 ? 00:00:00 [ksoftirqd/0] root 5 2 0 Sep01 ? 00:00:00 [stopper/0] root 6 2 0 Sep01 ? 00:00:00 [watchdog/0] root 7 2 0 Sep01 ? 00:00:38 [events/0] root 8 2 0 Sep01 ? 00:00:00 [cgroup] root 9 2 0 Sep01 ? 00:00:00 [khelper]
UID:属主
PID:进程号
PIDD:副进程号
C: cpu;运行的cpu编号
-eFH
-F: 显示完整格式的进程信息
-H: 以进程层级格式显示进程相关信息
[root@www proc]# ps -eFH | head#显示完成层级机构的进程信息 UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 2 0 0 0 0 0 Sep01 ? 00:00:00 [kthreadd] root 3 2 0 0 0 0 Sep01 ? 00:00:00 [migration/0] root 4 2 0 0 0 0 Sep01 ? 00:00:00 [ksoftirqd/0] root 5 2 0 0 0 0 Sep01 ? 00:00:00 [stopper/0] root 6 2 0 0 0 0 Sep01 ? 00:00:00 [watchdog/0] root 7 2 0 0 0 0 Sep01 ? 00:00:38 [events/0] root 8 2 0 0 0 0 Sep01 ? 00:00:00 [cgroup] root 9 2 0 0 0 0 Sep01 ? 00:00:00 [khelper] root 10 2 0 0 0 0 Sep01 ? 00:00:00 [netns]
注:PSR:CPU运行核心
-eo, axo
o:指明要显示信息的字段
[root@www proc]# ps axo pid,psr,command | head PID PSR COMMAND #显示自定义指定信息的字段,PID,PSR,COMMAND 1 0 /sbin/init 2 0 [kthreadd] 3 0 [migration/0] 4 0 [ksoftirqd/0] 5 0 [stopper/0] 6 0 [watchdog/0] 7 0 [events/0] 8 0 [cgroup] 9 0 [khelper]
pri: priority,优先级
psr: processor, CPU
[root@www ~]# ps -aux --sort -psr | head#显示cpu信息 Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 6724 0.1 0.4 100448 4428 ? Ss 07:58 0:00 sshd: root@pts/0 root 1 0.0 0.1 19356 1620 ? Ss Sep01 0:01 /sbin/init root 2 0.0 0.0 0 0 ? S Sep01 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S Sep01 0:00 [migration/0] root 4 0.0 0.0 0 0 ? S Sep01 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S Sep01 0:00 [stopper/0] root 6 0.0 0.0 0 0 ? S Sep01 0:00 [watchdog/0] root 7 0.0 0.0 0 0 ? S Sep01 0:40 [events/0] root 8 0.0 0.0 0 0 ? S Sep01 0:00 [cgroup]
pgrep, pkill(pgrep的链接): 杀死系统中指定的进程
pgrep [options] pattern
pkill [options] pattern
常用选项:
-u uid: effective user有效用户ID
[root@www proc]# pgrep -u root -l# root用户打开的进程 1 init 2 kthreadd 3 migration/0 4 ksoftirqd/0 5 stopper/0 6 watchdog/0 7 events/0 8 cgroup 9 khelper 10 netns
-U uid: real user真正的用户ID 与 -u匹配基本相同
-t terminal: 与指定终端相关的进程
[root@www proc]# pgrep -t pts/0 6397#显示pts/0终端的进程SSH PID为6397
-l: 显示进程名
-a: 显示完整格式的进程名
-P pid: 显示其父进程为此处指定的进程的进程列表
[root@www proc]# pgrep -P 6394#根据进程PID查找 6397
pidof:
根据其进程名获取其PID
[root@www ~]# pidof sshd #通过sshd进程查看PID号 6724 1677 [root@www ~]# ps -ef | grep ssd root 6816 6727 0 08:12 pts/0 00:00:00 grep ssd
top: 为一个动态显示过程,通过用户按键来不断刷新当前状态,提供了对当前系统的实时监控不过top已经大势已去,接着由htop取代
htop:
为linux系统的一个互动的进程查看器,文本模式应用程序,与传统的top相比,htop更加人性化,让用户交互式操作,
比top有以下优点:
可以横向或纵向滚动浏览进程列表,比便看到所有进程和命令行
在启动上,比top更快
杀进程时不需要输入进程号
支持鼠标操作
注:htop安装时需依赖ncurses-devel
命令行选项(COMMAND-LINE OPTIONS)
-C --no-color 使用一个单色的配色方案
-d --delay=DELAY 设置延迟更新时间,单位秒
-h --help 显示htop 命令帮助信息
-u --user=USERNAME 只显示一个给定的用户的过程
-p --pid=PID,PID… 只显示给定的PIDs
-s --sort-key COLUMN 依此列来排序
-v �Cversion 显示版本信息
交互式命令(INTERACTIVE COMMANDS)
上下键或PgUP, PgDn 选定想要的进程,左右键或Home, End 移动字段,当然也可以直接用鼠标选定进程;
Space 标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
U 取消标记所有进程
s 选择某一进程,按s:用strace追踪进程的系统调用
l 显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件
I 倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然
+, - When in tree view mode, expand or collapse subtree. When a subtree is collapsed a "+" sign shows to the left of the process name.
a (在有多处理器的机器上) 设置 CPU affinity: 标记一个进程允许使用哪些CPU
u 显示特定用户进程
M 按Memory 使用排序
P 按CPU 使用排序
T 按Time+ 使用排序
F 跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。
K 显示/隐藏内核线程
H 显示/隐藏用户线程
Ctrl-L 刷新
Numbers PID 查找: 输入PID,光标将移动到相应的进程上
glances :
glances 是一个由 Python 编写,使用 psutil 库来从系统抓取信息的基于 curses 开发的跨平台命令行系统监视工具。 通过 Glances,我们可以监视 CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器 和 文件系统 空间的利用情况。
主要功能:
CPU 信息 (用户的相关应用, 系统核心程序和空闲程序)
总内存信息,包括了物理内存,交换空间和空闲内存等等
之前的 1 分钟、5 分钟和 15 分钟平均的 CPU 负载
网络链接的下行和上行速度
处理器总数,以及其活动状态
硬盘 I/O 相关(读写)速度详情
当前挂载设备的磁盘使用情况
高 CPU 和内存使用的进程名,和相关应用的位置
在底部显示当前日期和时间
将消耗最高系统资源的进程用红色标出
常用选项:
-b: 以Byte为单位显示网卡数据速率;
-d: 关闭磁盘I/O模块;
-f /path/to/somefile: 设定输入文件位置;
-o {HTML|CSV}:输出格式;
-m: 禁用mount模块
-n: 禁用网络模块
-t #: 延迟时间
-1:每个CPU的相关数据单独显示;
galnces的内建命令:
a �C 对进程自动排序
c �C 按 CPU 百分比对进程排序
m �C 按内存百分比对进程排序
p �C 按进程名字母顺序对进程排序
i �C 按读写频率(I/O)对进程排序
d �C 显示/隐藏磁盘 I/O 统计信息
f �C 显示/隐藏文件系统统计信息
n �C 显示/隐藏网络接口统计信息
s �C 显示/隐藏传感器统计信息
y �C 显示/隐藏硬盘温度统计信息
l �C 显示/隐藏日志(log)
b �C 切换网络 I/O 单位(Bytes/bits)
w �C 删除警告日志
x �C 删除警告和严重日志
1 �C 切换全局 CPU 使用情况和每个 CPU 的使用情况
h �C 显示/隐藏这个帮助画面
t �C 以组合形式浏览网络 I/O
u �C 以累计形式浏览网络 I/O
q �C 退出(‘ESC‘ 和 ‘Ctrl&C‘ 也可以)
使用glances:
直接键入glances即可,如下图:
glances
C/S模式下运行glances命令:
服务模式:
glances -s -B IPADDR
IPADDR: 指明监听于本机哪个地址
客户端模式:
glances -c IPADDR
IPADDR:要连入的服务器端地址
当 Glances 服务器启动后,到本地执行下面的命令来指定服务器IP地址或主机名以链接。
[root@www proc]# glances -s -P 192.168.0.103
Glances 对于大多用户而言是个在系统资源上提供过多信息的工具。但是如果你是一个想要仅从命令行就能快速获取系统整体状况的系统管理员,那这个工具绝对是你的必备利器。
dstat:
性能监视工具,它完全替代了vmstat, isstat, nfsstat,ifstat..等
常用参数:
-c: 显示cpu相关信息;
-C #,#,...,total
-d: 显示disk相关信息;
-D total,sda,sdb,...
-g:显示page相关统计数据;
-m: 显示memory相关统计数据;
-n: 显示network相关统计数据;
-p: 显示process相关统计数据;
-r: 显示io请求相关的统计数据;
-s: 显示swapped相关的统计数据;
--tcp
--udp
--unix
--raw
--socket
--ipc
--top-cpu:显示最占用CPU的进程;
--top-io: 显示最占用io的进程;
--top-mem: 显示最占用内存的进程;
--top-lantency: 显示延迟最大的进程
直接键入 命令:dstat