Linux进程管理:
Linux内核:抢占式多任务
进程类型:
守护进程:daemon,跟终端无关,在系统引导中启动进程
用户进程(前台进程):通过终端启动的进程;
注:也可把在前台启动的进程送往后台,以守护模式运行;
进程状态:
运行态:running
就绪态:ready
睡眠态:可中断:interruptable,不可中断:uninterruptable
停止态:暂停于内存中,但不会被调度,除非手动启动
僵死态:zombie
进程的分类:
CPU-Bound
IO-Bound
/proc/:内核中的状态信息;
内核参数:可设置其值从而调整内核运行特性的参数;/proc/sys/
状态变量:其用于输出内核中统计信息或状态信息,仅用于查看;
参数:模拟成文件系统类型
进程:/proc/#
#:PID
进程的所有信息和状态都存放在该文件中,所以有很多进程查看工具帮我们把进程的相关信息数据直观的抽取出来
Linux系统上的进程查看及管理工具
ps命令
ps [OPTIONS]:
选项的风格:1、UNIX options
2、BSD options
3、GNU options
启动进程的方式:
系统启动过程中自动启动,与终端无关的进程;
用户通过终端启动;
BSD风格选项 | |
a | 所有与终端相关的进程 |
x | 所有与终端无关的进程 |
u | 以用户为中心组织进程状态信息 |
aux | 组合选项之一 |
与终端相关的进程;
显示结果各字段意义:
VSZ:虚拟内存集
RSS:常驻内存集
STAT:进程状态
STAT | 含义 |
R | running |
S | interruptable sleeping |
D | uninterruptable sleeping |
T | stoped |
Z | zombie |
+ | 前台进程 |
l | 多线程进程 |
n | 低优先级进程 |
< | 高优先级进程 |
s | session leader |
UNIX风格选项 | |
-e | 显示所有进程 |
-f | 显示完整格式的进程信息 |
-F | 显示更加完整格式的进程信息 |
-H | 以层级结构显示进程的 |
-ef | 组合选项之二 |
-eFH | 组合选项之三 c表示cpu占用比,PSR表示运行于那颗cpu上 |
常用选项组合之四:-eo , axo
o filed1,filed2,,,自定义要显示的字段列表,以逗号分隔;
常用的filed:pid,ni,pri,psr,pcpu,stat,comm,tty,ppid,rtprio
pid:显示进程号
ni:显示Nice值
pri:显示优先级数字
psr:运行在那颗cpu上
pcpu:cpu占用比
stat:状态
comm:运行的命令
tty:运行的终端
ppid:父进程号
rtprio:实时优先级
pgrep,pkill命令:进程过滤专用工具
pgrep [options] PATTERN
选项 | |
-u uid | 起作用的用户 |
-U uid | 显示指定用户的进程 |
-t TERMINAL | 与指定的终端相关的进程 |
-l | 显示进程名 |
-a | 显示完整格式的进程名 |
-p pid |
显示此进程的子进程 |
pkill命令选项与pgrep选项相同,表示杀死匹配到的进程
pidof命令:根据进程名取其pid
pidof 后跟进程名
top命令:动态显示系统进程信息。
键入top命令,会出现动态显示的一个进程信息界面
界面首部显示信息:
第一行:top-显示当前时间, up 显示运行时长 , user表示登录到当前系统上的用户数 ,load average表示过去1分钟,5分钟,15分钟内的平均负载(等待运行的进程队列长度)
第二行:Tasks:进程任务
第三行:%Cpu(s):us表示运行在用户空间的进程所占用的cpu百分比,sy表示运行在系统内核空间的进程所占用的百分比,ni表示用于nice值调整所占用的cpu百分比,id表示空闲cpu百分比,wa等待io完成所占用的cpu百分比,hi表示硬中断所占用的cpu百分比,si表示软中断所占用的cpu百分比,st表示被虚拟化程序偷走的cpu百分比。
第四行:物理分区内存空间占用情况;
第五行:交换分区内存空间占用情况;
(注:uptime命令显示top命令显示的第一行的信息:)
内建交互式命令:
首部信息显示选项:
可键入l命令显示第一行uptime信息;
可键入t命令显示tasks和cpu的信息;
可键入m命令显示第四行和第五行的内存信息;
可键入1命令显示所有cpu的信息;
进程的状态信息默认以cpu占用比进行排序
键入M表示以内存占用百分比进行排序:
键入T表示以运行时间进行排序
键入P表示以cpu占用百分比进行排序;
键入s表示修改刷新时间间隔,输入刷新隔时间,以秒为单位:
键入k后面跟上进程号表示杀死该进程:
键入q表示退出命令;
top命令选项:
-d#:设定刷新间隔
-b:以批次方式显示
-n#:显示多少批次(类似于ps命令)
htop命令:
htop是top的升级版。
使用方法大同小异;
默认显示所有cpu的占用信息,并且支持鼠标操作。
相比htop改进之处:界面更优化,操作更简单,支持鼠标操作。
内部交互式命令:
可键入t或F5命令以层级关系显示进程关系
可用上下按键或鼠标选定进程,键入l命令显示该进程所打开的所有文件:
选定进程后键入s命令,可以显示该进程的所有系统调用,而且能追踪新的系统调用:
可键入a将选定的进程绑定至某指定的CPU核心
可键入F2键设置显示需要的信息和显示格式:
htop命令选项:
-d#:指定刷新间隔
-u username :仅显示指定用户的进程
-s COLUME:以指定字段进行排序
vmstat命令:报告虚拟内存的统计数据
vmstat [options][delay[count]]
delay:设置刷新时间
count:设置显示次数
procs表示的含义:r:等待运行的进程个数,cpu上等待运行的任务的队列长度
b:处于不可终端睡态的进程个数,被阻塞的任务队列的长度
memory:swpd:交换内存使用总量
free:空闲的物理内存总量
buffer:用于buffer(缓冲)的内存总量
cache:用于cache(缓存)的内存总量
swap:si:数据进入swap中的数据速率(kb/s),换进
so:数据离开swap的数据速率,换出
io: bi:从块设备读入数据到内存的速度(kb/s)
bo:保存数据至块设备的速率
system:in:interrupts,中断速率,平均每秒
cs:context switch,上下文切换的速率
cpu:us:用户空间所占用的cpu百分比
sy:系统空间所占用的cpu百分比
id:空闲cpu
wa:等待IO完成的所占用的百分比
st:被虚拟化基础所偷走的cpu时间
vmstat选项:
-s:显示内存统计数据
pmap命令:指定显示进程内存映射表
pmap [options]pid...
另一种查看方式: cat /proc/PID/maps
dstat命令
dstat [-afv][options..][delay[count]]
默认会刷新时间间隔为2秒,并会一直动态显示下去
可以设置delay时间间隔,和count次数
选项 | |
-c | 显示指定cpu相关信息,也可指定特定的cpu,-C# #, |
-d | 显示磁盘的相关信息,也可指定特定磁盘,-D#,# |
-g | 显示page相关的速率数据 |
-m | Memory的相关统计数据 |
-n | Interface的相关统计数据 |
-p | 显示Process相关统计数据 |
-r | 显示lo请求的相关统计数据 |
-i | 显示中断的信息 |
--tcp | 显示tcp协议的连接 |
--udp | 显示udp协议的连接 |
--raw | 显示raw连接 |
--socket | 显示socket连接 |
--top-cpu | 显示最占用cpu的进程 |
--top-io | 显示最占用io的进程 |
--top-mem | 显示最占用内存的进程 |
kill命令:用于向进程发送信号,以实现对进程的管理
只有管理员有权限向进程发送信号
kill -l :显示当前系统的可用信号
也可在-l后跟上信号名称显示指定信号
信号的表示方法:
信号的数字标识
信号的完整名称
信号的简写名称
向进程发送信号:
kill [-s signal | -signal]pid...
常用信号:
1)SIGHUP:无需关闭进程
2)SIGINT:中止正在运行的进程,相当于Ctrl+c
9)SIGKILL:杀死运行中的进程,强制杀死
15)SIGTERM:终止运行
18)SIGCONT:=fg:进行停止中的进程
19)SIGSTOP:=Ctrl+z:停止进程并送往后台
killall[-SIGNAL]program
Linux系统作业控制:
job:
前台作业(foregroud):通过终端启动,且启动后会一直占据终端
后台作业(backgroud):可以通过终端启动,也可以不通过终端启动,但启动后即转入后台运行(释放终端)
如何让让作业运行于后台:
(1)运行中的作业:Ctrl+z送往后台后,作业会转为停止态。
(2)尚未启动的作业:#COMMAND&,此类作业虽被送完后台也依然与终端相关。
( 此类作业虽被送完后台也依然与终端相关,使用#nohup COMMAND &命令可以把送往后台的作业剥离与终端的关系)
查看所有作业:#jobs
可实现作业控制的常用命令:
# fg [[%]JOB_NUM]:把指定的作业调回前台;
# bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行;
# kill %JOB_NUM:终止指定的作业;
作业号后的+号表示优先级,如果使用控制作业命令后不加作业号,默认执行有加号的作业,之后执行有减号的作业最后执行没有符号的作业。
调整进程优先级:
可通过nice值调整的优先级范围:100-139,分别对应nice值:-20,19
进程启动时:其nice值默认为0,优先级是120
nice命令:以指定的nice值启动并运行命令
nice[options][command [ARGUEMENTS]..]
选项:-n NICE
注意:只有管理员可以调低nice值
renice命令:调整正在运行进程的优先级
renice[-n]NICE PID....
总结
进程管理是Linux系统运维中极其重要的一部分,所以熟练使用各种工具查看噶管理进程在生产环环境中起到了重要作用,也是不可或缺的一环,在进程管理工具中top使用时间比较长,是前期Linux系统中最广泛的一款进程查看工具,如今而言,htop逐渐取代了他的地位,相比较而言,htop拥有更好看的界面和更快捷的操作,更是支持用鼠标操作,在未来的操作系统中将会占据主导地位,dstat工具是一个可以查看各种进程状态的工具,也是非常强大,甚至可以查看网络状态。