马哥教育第十二天、进程管理、top、dstat、htop、case
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
cpu环0只运行内核,环3运行用户进程,当用户进程需要运行特权指令时(和硬件交互等)会发起软中断由用户模式转为内核模式,由内核代为执行相关操作。
进程被内核调度分为不同进程状态:
运行态(running):正在运行过程中的进程,
睡眠态(sleeping):等待调度到cpu上运行之前的状态,分为可中断睡眠(interruptable):随时可以被唤醒,等待下一次被调度到cpu运行之前。不可中断睡眠(uninterruptable):等待外部满足之前无法继续运行状态。
停止态(stopped):不会被内核调度并运行,只占用内存不占用cpu资源。
僵死态(zombie):进程创建机制:每一个进程都是由其父进程fork()自身而来,创建一个与之相同的子进程,子进程被销毁后由父进程进行资源回收,当父进程被销毁于子进程前该子进程就称为僵尸进程。
进程间通信:IPC (InterProcess Communication)
同一主机通信:signal、shm共享内存、semerphor旗语
不同主机通信:远程过程调用rpc: Remote Procedure Calling、socket
CPU虚拟化:内核把cpu分为时间片(timeslice),进程没有运行结束但分配使用cpu时间结束,需要保存现场,等待内核下次调度该进程继续在上次结束位置运行称为恢复现场。
线程:比进程更小可单独被调用执行的单位。在linux中被称为lwp轻量级进程
进程分类:批处理进程,主要工作于后台对cpu占用率比较高、交互式进程对I/O设备占用率比较多、实时进程此类进程优先级最高必须优先处理。
内存分页,每4k被内核分为一个页框(存储单位),内核负责从线性地址的页面数据映射到物理地址的页框中,内核借助于cpu硬件芯片mmu: 内存管理单元(memory management unit)存储线性地址和物理地址之间映射关系
物理地址空间、线性地址空间是由内核虚拟给进程的,每个进程都认为自己可以使用全部内存,进程调度优先级140个(0-139)
实时优先级:1-99数字越高优先级越高。
静态优先级:100-139数字越小优先级越高,静态优先级用户可以根据nice值调整从-20--19对应100-139,进程启动nice默认为0,优先调度级高的进程,但是内核会根据进程被cpu使用频率自动提高或降低进程优先级,
动态优先级:由内核管理维护,动态调整
Linux进程管理工具:ps, pstree, pidof, top, htop, pmap, vmstat, dstat, kill, job, glance
pstree:查看进程树。
ps:显示进程状态的命令,常用选项a、x。a显示与终端相关的进程,x显示与终端无关的进程。支持两种风格:SysV, BSD在选项上无需加-例如:ps a 。相关字段解释:PID:进程号、TTY:终端信息、 STAT:进程状态、TIME:运行时长、COMMAND:那个程序启动的该进程
常用组合ps aux或-ef或-eFH:-e显示所有进程,-f显示完整格式列表信息,-F:显示额外信息,-H:显示进程的层次结构
ps aux字段解释:USER:用户、 PID:进程号、%CPU:cpu占用百分比、%MEM内存占用百分比、VSZ(Virtual memory SiZe):虚拟内存集,占用线性地址空间大小、RSS:常驻内存集(不能被内存页转移到swap空间的)、TTY:和终端相关、STAT:进程状态、START:进程启动时间、TIME:运行累计时长、COMMAND:表示那个程序启动的该进程,包含在[]的进程表示为内核线程
ps -ef字段解释:UID:用户ID、PID:进程号、PPID:父进程号、C:cpu累计运行时长、STIME、TTY、TIME、CMD
ps -eFH字段解释:UID、PID、PPID、C、SZ、RSS、PSR:显示进程运行在那颗cpu上、STIME、TTY、TIME、CMD
ps -o自定义显示字段,常用组合ps axo例如:ps axo pid,command,psr,pri,ni,pri:进程优先级,ni:进程nice值
STAT状态说明:
R::运行态running
S::可中断睡眠
D:不可中断睡眠
T:停止态stopped
Z:僵死态zombie
s::多个进程的领导者session leader
+:前台进程
l: 多线程进程
N:低优先级进程
<::高优先级进程
pgrep:是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行
-U UID:仅显示由指定用户启动的进程,例如:pgrep -U apache
-G GID:仅显示与指定组相关的进程,例如:pgrep -U postgres
-t term...: 仅显示与指定终端相关的进程,例如:pgrep -t tty1
-l 同时显示进程号和程序名,例如:pgrep -lt tty1
pidof:显示指定程序所启动的进程的ID,例如:pidof postgre
top:显示linux任务,可以指定排序机制,M:内存百分比排序、P:CPU百分比排序、T:累积占用的CPU时间排序
l:是否显示负载信息,显示格式如下:
显示当前时间、系统运行时间、登录系统有多少用户、过去1,5,15分钟的平均负载指等待运行的进程队列的长度
t:是否显示进程和cpu相关信息,进程显示格式如下:
当前系统的进程总数、多少进程处于运行态、进程处于睡眠态、处于停止态、处于僵死态
显示cpu信息格式如下: Cpu(s)表示为多核cpu,默认显示平均值,按1分别显示多核cpu详细信息
us: 用户空间运行进程占用cpu百分比、sy:用于运行内核占用cpu百分比、ni:调整nice值占用cpu百分比、id:空闲cpu百分比、wa:等待I/O设备完成占用cpu百分比、hi:处理硬中断占用cpu百分比、si:处理软中断占用cpu百分比、st:被虚拟机占用的cpu百分比
m:显示内核和交换内存相关信息,
Mem:内存大小、used:已使用大小、free:未使用大小、buffers:缓冲大小、cached:缓存大小、swap:交换内存大小
q:退出top、k终止某个进程、s修改top刷新频率,默认为3秒
top字段说明:PID、USER、PR:RT表示实时优先级、NI:nice值、VIRT:虚拟内存集、RES:常驻内存集、SHR共享内存大小、S:进程状态、%CPU、%MEM、TIME+:累计占用cpu时间、COMMAND:启动此进程的命令
htop:是一个 Linux 下的交互式的进程浏览器,可以用来替换Linux下的top命令
u:交互式选择显示用户相关进程。
l:光标选中进程,l显示该进程文件列表,esc退出。
s:光标选中进程 ,s显示进程执行的系统调用,esc退出。
a:指定进程调度在那个cpu上
F1:获取帮助
vmstat:命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息例如:vmstat 2 3 ,每2秒更新一次只显示3次
procs:字段说明:
r:运行队列的长度、如果该队列过长说明cpu运行太慢。
p:被阻塞(等待IO完成,如:不可中断睡眠)队列的长度,如果该队列太长说明I/O设备读写速度太慢
memory:内存字段说明:
swpd:从物理内存交换至swap中的数据量
free:空闲物理内存大小
buff:缓冲、为了提高加速写操作
cache:缓存、为了提高加速读操作
swap:交换分区字段说明:
si(swap in):数据进入swap中的数据速率,kb/s
so(swap out):数据离开swap中的数据速率,如果频繁的读写交换分区说明内存太小,需要添加
io:
bi(block in): 从块设备读入的数据速率,kb/s
bo(block out):保存至块设备的数据速率
system:
in(interrupt): 中断速率
cs(context switch):进程切换速率
cpu:us:、sy:、id:、wa:、st:
常用选项:-s:显示内存统计数据
进程启动时调整nice值例如:nice -n 5 top
调整已运行进程的nice值,例如:renice -n -5 pid
进程间通信,信号:signal,借助于kill命令基于kill命令向其它的进程发信号,显示常用信号:kill -l或man 7 nignal,每个信号都可以使用三种方式之一在Kill进行调用:
数字代称:1, 2, 9, 15
信号完整名称:SIGHUP, SIGINT, SIGKILL, SIGTERM
信号简称:HUP, INT, KILL, TERM
1) SIGHUP:让程序重读配置文件需无须重新启动;
2) SIGINT:interrupt,打断正在运行中的程序;
9) SIGKILL:直接结束进程
15) SIGTERM:允许该进程完成任务后结束,默认发该信号例如:kill PID
killall:结束某一类所有进程例如:killall -9 httpd
Linux作业控制:
前台作业:通过终端启动,并在终止之前一直占据着终端
后台作业:作业启动之后即运行于后台,释放前台
交互式模式:手动启动的非守护进程类的程序,一般都运行于前台;
如何将作业运行于后台:
1、运行中的作业:Ctrl+z,送往后台后,作业处于STOPPED状态
2、尚未启动作业:COMMAND &,此类操作终端关闭该进程也终止,nohup COMMAND &终端关闭进程也正常允许
查看Ctrl+z送往后台的作业:jobs,
作业控制命令:fg #:将后台作业调回前台,bg #:让后台作业继续在后台运行
dstat:进程查看
-c: 显示CPU统计数据
-d: 显示disk统计数据
-D DISK: 只显示指定disk的统计数据
-g: 显示page的统计数据
-i: 显示中断的统计数据
-m: 显示内存的统计数据
-l: 显示系统负载的统计数据
-n: 显示网络接口相关
-N INTERFACE: 仅显示指定的网络接口的数据
-s: 显示交换内存
-p: 进程队列
--ipc: 显示ipc消息队列、信号量和共享内存的使用状况
-y: 系统状态数据
-f:以完整格式显示所有信息
-v":显示结果类似于vmstat命令
默认相当于使用“dstat -cdngy”,也相当于“dstat -a”
网络连接状态统计:--tcp、--udp、--raw、--unix
pmap命令:显示指定进程的物理内存空间映射表。例如:pmap PID
glances类似于htop,但是可以查看远程主机信息:由epel源所提供
课外作业:nmap, netcat, tcpdump, nethogs, iftop
case有多个测试条件时,case语句会使得语法结构更清晰,支持文件名通配机制,还支持 | ,语法格式如下
case 变量引用 in
PATTERN1)
分支1
;;
PATTERN2)
分支2
;;
*
分支n
;;
esac
练习:写一个脚本,对/etc/目录及内部的所有文件打包压缩
显示一个菜单,让用选择使用的压缩工具:xz) xz compress tool、gz) gzip compress tool、bz2) bzip2 compress tool
根据用户选择的工具,对/etc执行相应的操作并保存至/backups目录,文件形如/backups/etc-日期时间.tar.压缩后缀
#!/bin/bash # read -p "Please select the compression method(xz | gz | bz2):" Compression etc="etc-`date +%Y-%m-%d-%H-%M-%S`" case $Compression in xz) tar Jcf "$etc.tar.xz" /etc/* if [ ! -d /backups ];then mkdir -p /backups fi mv "$etc.tar.xz" /backups/ ;; gz) tar zcf "$etc.tar.gz" /etc/* if [ ! -d /backups ];then mkdir -p /backups fi mv "$etc.tar.gz" /backups/ ;; bz2) tar jcf "$etc.tar.bz2" /etc/* if [ ! -d /backups ];then mkdir -p /backups fi mv "$etc.tar.bz2" /backups/ ;; *) echo "you inpot error:" exit 5 ;; esac
练习:写一个脚本,使用形式如下所示showifinfo.sh [-i INTERFACE|-a] [-v]
1、-i或-a不可同时使用,-i用于指定特定网卡接口,-a用于指定所有接口;显示接口的ip地址
2、使用-v,则表示显示详细信息显示接口的ip地址、子网掩码、广播地址;
3、默认表示仅使用-a选项;
if [ $# -lt 1 ];then che=a else che=$1 fi #read -p "please inpot i or a or v:" che count=`ifconfig | grep "eth[0-9]" | wc -l` if [ $che == "ia" -o $che == "ai" ]; then echo "Options a and i Cannot be used together " exit 6 else case $che in i) read -p "please inpot need display network equipment this machine $count network:" str if [ $str -le $count &> /dev/null -a $str -gt 0 ];then let str=$str-1 ipadd=$(ifconfig eth"$str" |grep -Eo "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\.){3}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>") echo "eth$str addr:$ipadd " else echo "you inpot error" exit 2 fi ;; a) for((i=0;$i < $count;i++));do ipadd=$(ifconfig eth"$i" |grep -Eo "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\.){3}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>") echo "eth$i addr:$ipadd " done ;; v) for((i=0;$i < $count;i++));do ipadd=$(ifconfig eth"$i" |grep -Eo "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\.){3}([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>") echo "eth$i addr:$ipadd " ipadd=$(ifconfig eth"$i" |grep -Eo "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\.){3}(255)\>") echo "eth$i Bcast:$ipadd " ipadd=$(ifconfig eth"$i" |grep -Eo "\<(255\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9])\>") echo "eth$i Mask:$ipadd " done ;; *) echo "error" exit 5 ;; esac fi
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。