Linux的进程管理
进程:简单来说就是一个运行中的程序的副本,是进程的一个实例,它是有生命周期的
进程的创建:进程都是由其父进程创建的,最开始的进程就是init。
进程优先级:0-139
实时优先级:1-99;
静态优先级:100-139,对于静态来说数字越小优先级越高,
优先级还有一个Nice值,值为-20(对应100),19(对应19),可以通过调整Nice值来调整优先级。
进程分为守护进程和前台进程,守护进程就是在系统引导过程中启动的进程,跟终端无关的进程;前台进程跟终端有关,通过终端启动的进程。(也可以把前台进程送往后台以守护进程运行)
进程状态:
运行状态:running
就绪态:ready
睡眠态:有分为可中断interruptablesleeping;不可中断uninterruptable sleeping
停止态:stopped,暂停于内存中,但不会被调度,除非手动启动之
僵死态:zombie
Linux中进程查看及管理的工具有pstree ,ps,top,htop,glances,dstat,vmstat等
Linux系统各进程的相关信息都保存在/proc/PID目录下的各文件中,各种查看工具也是读取这里面的信息,显示为我们更好理解的信息
(1) pstree命令:查看进程树的
CentOS6的显示结果,可以看到init是最开始是的进程
CentOS7中查看的如下,不是init了而是systemd
(2) ps命令:查看进程的运行状态信息等,还是一个相当强大的命令
支持两种风格,带‘-’和不带‘-’的
参数:
-a:与终端相关的进程
-e:显示所有进程
-f:显示完整格式程序信息
-u:以用户为中心组织进程状态的信息显示
-x:与终端无关的进程
-F:显示完整格式的进程信息
-H:以进程层级格式显示进程相关信息
常用组合:-aux,-ef,-eFH,-axo等
还可以使用-eo{pid, tid,class,rtprio,ni,pri,psr,pcpu,stat,comm} axo{stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm}
显示自己指定需要的信息;ni:Nice值,pri:优先级,rtprio:实时优先级
ps -aux显示的信息有以下几列
USER:用户名;PID:进程号;%CPU:CPU利用率;%MEM:内存使用率;
VSZ:Virtual memory Size,虚拟内存集(虚拟地址大小);RSS:ReSident Size,常驻内存集(物理内存大小);TTY:是否与终端有关,?表示无关
STAT:进程状态
R:running;S:interruptable sleeping;D:uninterruptablesleeping
T:stopped;Z:zombie(父进程会替子进程收尸);x:死亡状态
+:前台进程;l:多线程进程;N:低优先级进程;<:高优先级进程;
s:session leader,某一个会话的leader进程
START:开始时间
TIME:用掉用的CPU时间
COMMAND:所执行的命令
ps –ef
(3) pgrep:完成进程管理信息的过滤;pkill:杀死进程的;
两个命令的用法格式相近,放在一块说明
语法格式:pgrep [options]pattern(用户名);pkill [options] pattern
参数:
-u uid:effective user 有效用户ID
-U uid: real user 实际的用户ID
-t terminal: 与指定终端相关的进程
-l: 显示进程名,
-a: 显示完整格式的进程名
-P pid: 显示其父进程为此处指定的进程的进程列表
pgrep – u root –l
(4) pidof:根据进程名获取进程的ID号
以上命令显示的都是进程的静态信息
下面是显示进程动态信息的命令
(5) top:动态刷新显示进程的信息,是一个交互式的进程状态实时查看工具
默认排序是CPU的利用率
排序:
P:以占据的CPU百分比;
M:占据内存百分比;
T:累积占据CPU时长;
首部信息显示:
uptime信息:l命令(显示或不显示)
tasks(进程树)及cpu信息:t命令
cpu分别显示:1 (数字)
memory信息:m命令
退出命令:q
修改刷新时间间隔:s
终止指定进程:k
选项:
d #: 指定刷新时间间隔,默认为3秒;
-b: 以批次方式;
-n #: 显示多少批次;
(6) htop:是基于文本模式的、交互式的进程查看器,主要用于控制台或shell中,是top的高级版
这个工具在系统中一般不是默认安装的,需要自己进行安装,使用yum进行安装就可以了(如果不会看本人以前的博客,或网上搜索下)
常用选项:
F1 : 查看htop使用说明;F2 : 设置;F3 : 搜索进程;F4 : 过滤器,按关键字搜索;
F5 : 显示树形结构;F6 : 选择排序方式;F7 : 减少nice值,这样就可以提高对应进程的优先级; F8 : 增加nice值,这样可以降低对应进程的优先级;F9 : 杀掉选中的进程;F10 : 退出htop或者q退出;
搜索选项:
l :显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件;
u :显示所有用户,并可以选择某一特定用户的进程;
s : 将调用strace追踪进程的系统调用;
t : 显示树形结构;
H :显示/隐藏用户线程;
I :倒转排序顺序;
K :显示/隐藏内核线程;
M :按内存占用排序;
P :按CPU排序;
T :按运行时间排序;
上下键或PgUP, PgDn : 移动选中进程;
左右键或Home, End : 移动列表;
Space(空格) : 标记/取消标记一个进程;
命令可以作用于多个进程
使用时,直接htop回车就可以了
F2可以设置要显示信息内容
-d #: 指定延迟时间;
-u UserName: 仅显示指定用户的进程;
-s COLOMN: 以指定字段进行排序;
命令:
s:跟踪选定进程的系统调用;
l:显示选定进程打开的文件列表;
a:将选定的进程绑定至某指定CPU核心;
t:显示进程树
(7) vmstat命令:对操作系统的虚拟内存、进程、CPU活动进行监控,它对系统的整体情况进行统计 命令使用格式:
vmstat [options] [delay [count]]
选项:-s:显示内存的统计数据
显示的信息的解释:
procs:
r:等待运行的进程的个数;
b:处于不可中断睡眠态的进程个数;(被阻塞的队列的长度);
memory:
swpd: 交换内存的使用总量;
free:空闲物理内存总量;
buffer:用于buffer的内存总量;
cache:用于cache的内存总量;
swap:
si:数据进入swap中的数据速率(kb/s)
so:数据离开swap中的数据速率(kb/s)
io:
bi:从块设备读入数据到系统的速率;(kb/s)
bo: 保存数据至块设备的速率;
system:
in: interrupts, 中断速率;
cs: context switch, 进程切换速率;
cpu:
us:用户进程执行时间(user time)
sy:系统进程执行时间(system time)
id:空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示。
wa:等待IO时间
(8) pmap命令:显示一个进程的内存映射
语法格式:
pmap [options] pid [...]
-x: 显示详细格式的信息;
pmap查看的信息,可以通过另外一种方法实现:
#cat /proc/PID/maps
(9) glances命令:在用户的终端上实时动态的显示重要的系统数据和变化。显示的数据包括:CPU、内存、磁盘、网络等使用情况,内核、运行队列、负载、I/O 状态、消耗资源最多的进程等等
Glances 可以单机使用,也可以客户端-服务器模式多机使用。单机使用很简单,直接运行就可以了:
客户端-服务器模式稍微复杂一点,需要在一台机器上以服务器模式启动 glances -s,另外一台机器以客户端模式连接 glances -c. 比如在有两台机器 A 和 B 都装了 glances,要想在 A 上看 B 上的 glances 的话需要事先在 B 上用服务器模式启动 glances(假设 B 的 IP 地址是 172.16.100.18):
# glances -s
然后再从 A(客户端)用 Glances 访问 B(服务器):
# glances -c 172.16.100.18
glances命令格式:
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 #: 延迟时间间隔
-1:每个CPU的相关数据单独显示;
glances
其中显示的字段的意义如下:
VIRT: 虚拟内存大小
RES: 进程占用的物理内存值 %CPU:该进程占用的 CPU 使用率 %MEM:该进程占用的物理内存和总内存的百分比 PID: 进程 ID 号 USER: 进程所有者的用户名 TIME+: 该进程启动后占用的总的 CPU 时间 IO_R 和 IO_W: 进程的读写 I/O 速率 NAME: 进程名称 NI: 进程优先级 S: 进程状态,其中 S 表示休眠,R 表示正在运行,Z 表示僵死状态。使用h查看里面的内建命令
交互界面下可以使用的快捷键的功能如下:
h : 显示帮助信息
q : 离开程序退出c :按照 CPU 实时负载对系统进程进行排序m :按照内存使用状况对系统进程排序i:按照 I/O 使用状况对系统进程排序p: 按照进程名称排序d : 显示磁盘读写状况w : 删除日志文件l :显示日志s: 显示传感器信息f : 显示系统信息1 :轮流显示每个 CPU 内核的使用情况(次选项仅仅使用在多核 CPU 系统)(10) dstat命令:动态显示CPU,disk,net,page,system负载情况等
语法格式:
dstat [-afv] [options..] [delay [count]]
常用选项:
-c: 显示cpu相关信息;
-C #,#,...,total
-d: 显示disk相关信息;
-D total,sda,sdb,...
-g:显示page相关统计数据;
-m: 显示memory相关统计数据;
-n: 显示network相关统计数据;
-p: 显示process相关统计数据;
-r: 显示io请求相关的统计数据;
-s: 显示swapped相关的统计数据;
--top-cpu:显示最占用CPU的进程;
--top-io: 显示最占用io的进程;
--top-mem: 显示最占用内存的进程;
--top-lantency: 显示延迟最大的进程;
--ipc 显示ipc消息队列,信号等信息
--socket 用来显示tcp udp端口状态
-a all 此为默认选项 等同于 -cdngy
-v vmstat 等同于 -pmgdsc -D total
--output 文件 此选项也比较有用,可以把状态信息以csv的格式重定向到指定的文件中,以便日后查看
(11) kill命令:向进程发送控制信号,以实现对进程管理
显示当前系统可用信号:
# kill –l
# man 7 signal
常用信号:
1) SIGHUP: 无须关闭进程而让其重读配置文件;
2) SIGINT: 中止正在运行的进程;相当于Ctrl+c;
9) SIGKILL: 杀死正在运行的进程;
15) SIGTERM:终止正在运行的进程;
18) SIGCONT:
19) SIGSTOP:
指定信号的方法:
(1) 信号的数字标识;1, 2,9
(2) 信号完整名称;SIGHUP
(3) 信号的简写名称;HUP
向进程发信号:
kill [-SIGNAL] PID...
终止“名称”之下的所有进程:
killall[-SIGNAL] Program
上面重要的是top,htop,glances,dstat的使用,如果想查看这几个命令的更详细的操作,使用man命令。