- 进程(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
马哥教育第十二天、进程管理、top、dstat、htop、case
时间: 2024-08-06 22:24:28
马哥教育第十二天、进程管理、top、dstat、htop、case的相关文章
马哥教育第二十二天IO模型理论、数据库基础理论、LAMP平台理论基础及mysql部署
1.IO模型理论基础详解: http或https都是基于tcp协议完成通讯.在tcp中使用socket通讯模型,在domain中界定socket是如何定义. domain有三种工作类型: unix domain:每个socket地址是个文件路径 ipv4 do
【挨踢人物传】马永亮:感悟学习三境界 引领马哥教育的崛起(第19期)
[编者有话] 本期的嘉宾马永亮,一次误以为是"擅长"的选择,开始结缘计算机,然而当真正接触后才发现犹如"井底之蛙",此前的擅长根本不值一提,从天堂到地狱的落差,没有挫败他的信心和追求,反而激起了他更加强烈的求知欲望,在IT的道路上不断的成长感悟-- [本期人物档案] 个人信息: 51CTO账号:马哥教育 姓名:马永亮 性别:男 所在地:河南郑州 教育信息:研究生 关键词:马哥教育创办人 Linux系统运维专家 51CTO专家博主 51CTO学院签约讲师
马哥教育M28-第5-7天的学习总结
马哥M28-第五天. linux安全的上下文: 进程的发起者 命令 对象 root ping 127.0.0.1 root touch testfile1 primary group :主要组.私有组 supplementary group : 辅助组.附加组.公有组 /etc/passwd:(里面记录的用户的密码映射到了/etc/shadow) pwconv :将passwd当中的密码映射到了/etc/
马哥教育第20天至23天学习总结
马哥M28_20天<font size=4>1.ping -s 60000 目标主机ip地址 -f :指定发包大小60000ping2.IP :由前网络号部分和后主机号部分组成:网络号位数必须是连续性的二进制111111,不能是非连续性的:网络ID由IP二进制与子网掩码二进制组合求解得到正确的网络号计算网络数:2^可变的网络ID计算网络的主机最大数量:2^主机ID位-2 0.0.0.0表示所有地址 cidr书写方式:1.1.1.0/24 24表示网络号位数 A类地址: 前8位网络ID,后24位
Python培训时长多久可以学会?马哥教育9年经验之谈
在Python成为一门炙手可热的语言之后,很多人也开始准备向这个行业发展.技术入行也就是培训和自学两条路,各有优劣,不过培训因为学习比较系统比较快也受到不少人欢迎. 今天我就来给大家分享一下Python培训里的一些东西,让大家在选择的时候多掌握点情报. 选择一家好的教育培训机构的确可以达到事半功倍的效果.不仅能大大缩短学员自行摸索和自我积累的时间,而且能帮助学员在更高的起点上超越,从而在"前人"的肩膀上未雨绸缪,少走弯路. 总体来说,正规的IT培训机构通常具有从业经验丰富.阅历深厚的职
使用kubeadm快速部署Kubernetes(v1.12.1)集群---来源:马哥教育马哥原创
使用kubeadm快速部署Kubernetes(v1.12.1)集群------来源:马哥教育马哥原创 Kubernetes技术已经成为了原生云技术的事实标准,它是目前基础软件领域最为热门的分布式调度和管理平台.于是,Kubernetes也几乎成了时下开发工程师和运维工程师必备的技能之一. 一.主机环境预设 1.测试环境说明 测试使用的Kubernetes集群可由一个master主机及一个以上(建议至少两个)node主机组成,这些主机可以是物理服务器,也可以运行于vmware.virtualbo
《马哥教育协办GIAC、GOPS顶级技术峰会完美落幕》
GIAC.GOPS大会完美落幕 除了你.我.他,还有马哥教育陪你走过 马哥教育协办过多次全球大会,此次GIAC.GOPS全球互联网大会完美落幕,作为协办方我们也是很荣幸!马哥教育的创始人马哥带着马帮学员,让他们有更多的机会与大咖们交流分享,建立更广的人脉圈子. 本次大会可谓是大咖云集的一场盛会!各种技术总监.CTO. 通过本次大会就可以感受到马哥教育的教学精神.马哥教育不仅可以让你学到专业的技能,还有更多的机会与大咖们分享交流.我们不仅要学的好,丰富的人脉资源是我们职场上必要部分!相信在参加本次
马哥教育面授班-标准I/O和管道-课后小作业-2016年7月28
马哥教育面授班-7月28号作业 1 .将/etc/issue 文件中的内容转换为大写后保存至/tmp/issue.out 文件中 [[email protected] ~]# tr 'a-z' 'A-Z' </etc/issue | >> /tmp/issue.out [[email protected] ~]# cat /tmp/issue.out CENTOS RELEASE 6.8 (FINAL) KERNEL \R ON AN \T \N \D \S MAGE EDUCATIO
马哥Linux培训马哥教育到底怎么样?马哥教育好不好?我来讲讲我的曲折经历!
2016年是我很迷茫的一年,不知道该学什么,不知道该去哪里,当时也有去培训的打算,也不确定培训什么,php?前端?or运维,同学有做PHP的,也有Java的也有前端的,也有做运维的,他们的建议我也听了不少,但是自己还是犹豫不决,怕花了钱到时找不到工作,后来感觉运维相对开发要容易一些,听同学说PHP今年也降温不少,学的人太多,没前两年好找了,当然,学得特好再另说.后来就去马哥考察了,当时去的时候是早上8点左右,看到有马哥的学员在校门口买早餐,包子,茶叶蛋什么的,我也没听课进去看看教室和学员聊了几句