Linux之进程查看与管理
1、进程的基本概念
进程是运行起来的程序。唯一标示进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的
进程分类:交互式进程、批处理进程、实时进程
交互式进程:一般是由Shell启动的进程。交互式进程有:控制台命令shell,文本编辑器,图形应用程序
批处理进程(Batch Process):不需要用户交互,一般在后台运行。
实时进程:这种进程不能被低优先级进程阻塞,并且在很短的时间内做出反应。典型的实时进程:音视频应用程序,机器人控制等
进程优先级:静态优先级、动态优先级
静态优先级(priority): 被称为“静态”是因为它不随时间而改变,内核不会修改它,只能通过系统调用nice(每个进程都会具有的属性,一个能影响进程优先级的数字)去修改
静态优先级内核为其分配的优先级数为:100(高优先级)-139(低优先级),数值越大,优先级越低
动态优先级(counter): 只要进程拥有CPU,它就随着时间不断减小;当它为0 时,标记进程重新调度
实时优先级:实时优先级只对实时进程有意义。1-99:实时优先级,数字越大优先级越高
进程状态:运行态(running正在运行的进程)、可中断睡眠态(进程处于睡眠状态,但是可以被中断)、不可中断的睡眠态(进程处于睡眠状态,但是不可以被中断)、停止态(stoped不会被内核调度)、僵死态(zombie产生的原因是进程结束后,它的父进程没有wait它,所导致的)
2、进程与线程区别
进程包含四个要素:一段供进程执行的程序,该程序可以被多个进程执行、独立的内核堆栈、进程控制块(task_struct)、独立的存储空间。线程只包含了进程前面三种要素,线程分:内核线程(完全没有用户空间)、用户线程(共享用户空间)
3、常见的进程查看以及管理工具:top、pstree、pidof、pgrep、pkill、htop、glances、pmap、vmstat、dstat、iostat、kill、job、bg、fg
pstree命令:以树状图显示进程间的关系
语法:pstree [-acGhlnpuUV][-H ][/]
常见参数选项
-a:显示每个程序的完整指令
-p:显示程序识别码
练习:
1)、查看当前进程树以及显示程序识别码
ps命令:是Process Status的缩写,显示当前进程的状态
语法:ps[参数]
常见参数选项
a:显示所有进程
u:指定用户的所有进程
-e: 显示所有进程
-f: 显示丰富格式信息
-F: 显示额外信息
-H: 以层级形式显示进程间关系
组合参数
-aux:显示所有包含其他使用者的进程
-ef:丰富格式显示进程状态
-eFH:层级显示额外信息
axo:自定义显示内容,如:ps axo pid,command,psr,pri
练习:
1)、显示当前进程状态
注解上图各个字段的意义
USER:进程使用者账号
PID :进程编号
%CPU:使用掉的CPU资源百分比
%MEM:占用的物理内存百分比
VSZ :使用虚拟内存量 (Kbytes)
RSS :占用的固定的内存量 (Kbytes)
TTY :占用终端,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序
STAT:目前的进程状态,主要的状态有
R :运行
S :睡眠 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒
T :停止
Z :终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
START:被触发启动的时间
TIME :CPU 运作的时间
COMMAND:运行的指令
2)、自定义显示id、命令、优先级、cpu编号
pgrep命令:查找或者发信号给进程通过名称和其它属性
语法:pgrep [参数] 程序名
常见参数选项:
-l:同时显示进程名和PID
-o:当匹配多 个进程时,显示进程号最小的那个
-n:当匹配多个进程时,显示进程号最大的那个
练习:
1)、显示当前ssh进程的ID,并且列出最小的那个
pidof命令:用于查找一个运行的程序的PID (不常用,仅供了解)
常见参数选项
-s:只返回1个pid
-x:返回运行给定程序的shell的pid
-o:忽略后面给定的pid
练习:
1)、显示httpd进程PID
top命令:显示系统当前的进程和其他状况,动态显示
语法:top [参数] [选项]
常见参数选项、交互命令
交互命令
P:以占据的CPU百分比大小排序;
M:以占据Memory空间大小排序;
T:CPU累积占用时间排序;
l: 是否显示系统负载行;
t: 是否显示进程摘要信息及CPU负载状态;
1:平均或单独显示CPU的负载状态;
m: 是否显示内存相关的状态信息;
q: 退出命令
s: 修改延迟时长
k: 终止指定进程
选项
-d:屏幕信息刷新之间的时间间隔
-b: batch,批次显示
-n #: 显示的批次数量
练习:
1)、显示当前进程状态
注解上图各行、字段的信息,主要说明前5行系统整体的统计信息内容,第6行跟ps命令查下进程状态字段类似,这里不重复
第1行依此为:当前时间、系统运行时间(时:分)、当前登录用户数、load average(系统负载)、三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值
第2行依此为:进程总数、正在运行的进程数、睡眠的进程数、停止的进程数、僵尸进程数
第3行依此为:用户空间占用CPU百分比、用户进程空间内改变过优先级的进程占用CPU百分比、空闲CPU百分比 、等待输入输出的CPU时间百分比
第4行依此为:物理内存总量、使用的物理内存总量、空闲内存总、用作内核缓存的内存量
第5行依此为:交换区总量、使用的交换区总量、空闲交换区总量、缓冲的交换区总量
2)、更新两次后终止更新显示
3)、top视图监控每个逻辑CPU的状况并且高亮显示(按键“1”、“b”)
4)、改变当前进程状态以%MEM排序(注:可通过”shift + >”或”shift +
uptime命令:查询linux系统负载的。用法比较简单并且查下的出来的结果与top命令第一行load average类似这里不做详细介绍,下图与上图top命令可对比一下
htop工具:基本文本模式的、交互式的进程查看器,主要用于控制台或shell中,可以替代top,或者说是top的高级版。默认不安装,需要手动安装。有以下几个优点:快速查看关键性能
统计数据、横向或纵向滚动浏览进程列表、杀掉进程时可以直接选择而不需要输入进程号、鼠标操作条目、比top启动得更快
常用选项功能
F1 : 查看htop使用说明
F2 : 设置
F3 : 搜索进程
F4 : 过滤器,按关键字搜索
F5 : 显示树形结构
F6 : 选择排序方式
F7 : 减少nice值,这样就可以提高对应进程的优先级
F8 : 增加nice值,这样可以降低对应进程的优先级
F9 : 杀掉选中的进程
F10 : 退出htop
/ : 搜索字符
l :显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件
u :显示所有用户,并可以选择某一特定用户的进程
s : 将调用strace追踪进程的系统调用
t : 显示树形结构
H :显示/隐藏用户线程
I :倒转排序顺序
K :显示/隐藏内核线程
M :按内存占用排序
P :按CPU排序
上下键或PgUP, PgDn : 移动选中进程
左右键或Home, End : 移动列表
Space(空格) : 标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
练习:
1)、安装显示当前系统进程状态
2)、树形显示,杀掉进程httpd
3)、显示当前系统进程搜索httpd进程
vmstat命令:Virtual Meomory Statistics(虚拟内存统计)的缩写,监控虚拟内存、进程、CPU
语法:vmstat [参数]
常见参数选项
-a:显示活跃和非活跃内存
r: 等待运行的进程的个数;(队列长度)
count:刷新次数
-S:使用指定单位显示( k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte))。默认单位为K(1024 bytes)
练习:
1、显示当前进程情况
对上图各字段说明:
Procs(进程):
r: 运行队列中进程数量
b: 等待IO的进程数量
Memory(内存):
swpd: 使用虚拟内存大小
free: 可用内存大小
buff: 用作缓冲的内存大小
cache: 用作缓存的内存大小
Swap:
si: 每秒从交换区写到内存的大小
so: 每秒写入交换区的内存大小
IO:(现在的Linux版本块的大小为1024bytes)
bi: 每秒读取的块数
bo: 每秒写入的块数
系统:
in: 每秒中断数,包括时钟中断
cs: 每秒上下文切换数
CPU(以百分比表示)
us: 用户进程执行时间(user time)
sy: 系统进程执行时间(system time)
id: 空闲时间(包括IO等待时间),中央处理器的空闲时间 。以百分比表示
wa: 等待IO时间
glances工具:网络、磁盘读写、磁盘分区等情况(工具包需要手动安装)
常用选项:
-b: 以Byte/s为单位显示网卡设备数据交换速率;
-d: 关闭磁盘I/O功能模块;
-f /PATH/TO/SOMEFILE:设置输出文件的位置及格式
-o HTML|CSV:使用HTML/CSV格式
-m: 关闭mount功能模块
-n: 关闭网络功能模块
-r: 关闭进程列表功能模块
-t #: 指定延迟时长,默认为3秒
-1:单独显示每颗CPU相关负载数据信息
glances支远程模式(C/S):
Server: 以监听模式启动glances
Client: 以远程模式启动glances,远程连入指定服务器,并显示Server上的相关性能数据
服务模式:glances -s -B 本地IP地址
-B: 用于指明监听的本地地址;
客户端模式:glances -c 服务器IP地址
-c: 用于连入的服务器的地址;
练习:
1)、当前系统状态,输出 HTML 格式文件
注意需要安装需要python-jinja2库
2)、远程查看192.168.2.10(注意关闭防火墙)系统状态
dstat工具:实时地看到所有系统资源(可取代vmstat,iostat,netstat和ifstat这些命令)
语法:dstat [-afv] [options..] [delay [count]]
常见参数选项
-l :显示负载统计量
-m :显示内存使用率
-r :显示I/O统计
-s :显示交换分区使用情况
-t :将当前时间显示在第一行
-c : 显示cpu性能指标相关的统计数据;
-d : 显示disk相关的速率数据
-g : 显示page相关的速率数据
-i : 显示interrupt相关的速率数据
-n : 显示网络收发数据的速率
-p : 显示进程相关的统计数据
-y : 显示系统相关的数据,包括中断和进程切换
--tcp :显示常用的TCP统计
--udp :显示监听的UDP接口及其当前用量的一些动态数据
--disk-util :显示某一时间磁盘的忙碌状况
--freespace :显示当前磁盘空间使用率
--proc-count :显示正在运行的程序数量
--top-bio :指出块I/O最大的进程
--top-cpu :图形化显示CPU占用最大的进程
--top-io :显示正常I/O最大的进程
--top-mem :显示占用最多内存的进程
练习:
1)、显示系统资源情况
简要注解上图字段说明
CPU状态:CPU的使用率
磁盘统计:磁盘的读写操作,这一栏显示磁盘的读、写总数
网络统计:网络设备发送和接受的数据,这一栏显示的网络收、发数据总数
分页统计:系统的分页活动。
系统统计:这一项显示的是中断(int)和上下文切换(csw)
2)、显示当前网络情况
killall命令:杀死所有指定进程(kill processes by name)
语法:killall[参数][进程名]
常见参数选项
-e:要求匹配进程名称
-i:交互模式,杀死进程前先询问用户
-l:列出所有的已知信号名称
-q:不输出警告信息
-s:发送指定的信号
-v:报告信号是否成功发送
-w:等待进程死亡
kill命令:终止指定的进程(terminate a process)的运行
kill[参数][进程号]
常见参数选项
-p:指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s:指定发送信号
-u:指定用户
常用信号
HUP 1 终端断线
INT 2 中断(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + \)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反, fg/bg命令)
STOP 19 暂停(同 Ctrl + Z)
练习:
1)、用ps查找进程vim,然后用kill杀掉
2)、杀死所有同名httpd进程
3)、用ps查找进程vim,然后用kill杀掉所有同名进程
下面简单介绍一下作业管理
作业管理指的是控制正在运行的进程的行为,有前台作业、后台作业。。比如,用户可以挂起一个进程,等一会儿再继续执行该进程。
前台作业:通过终端启动,并且在停止之前也会一直占据终端
后台作业:作业启动之时与终端无关,或者是在前台启动,但启动后转为与终端无关模式运行
作业管理常用操作命令
&:命令放在后台执行
jobs:查看后台作业
fg:作业后台到前台(后台stopped、后台running,到前台running)
bg:让作业后台运行(后台stopped,到后台running)
常用快捷键
Ctrl+C:结束当前命令
Ctrl+D:输入结束(EOF)
Ctrl+Z:当前作业放到后台并暂停
Ctrl+S:暂停屏幕输出
Ctrl+Q:恢复屏幕输出
练习:
1)、将ping 192.168.2.10命令后台执行,查看后台作业,然后再掉到前台运行,最后结束当前命令