081_韩顺平Linux_进程管理小结_哔哩哔哩_bilibili
14.1 基本介绍
1) 在LINUX中, 每个执行的程序都称为一个进程。每一个进程都分配一一个ID号(pid,进程号)。=>windows => linux
2)每 个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
3)一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才结束。
4) 示意图
14.2显示系统执行的进程
14.2.1 基本介绍
ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数.
14.2.2 ps 详解
(1) 指令: ps -aux | grep xxx ,比如我看看有没有sshd服务
(2) 指令说明
System V展示风格 ---->上上图详解
14.2.3应用实例
-
要求: 以全格式显示当前所有的进程,查看进程的父进程。查看 sshd的父进程信息
ps -ef 是以全格式显示当前所有的进程,-e 显示所有进程,f全格式
ps -ef | grep sshd
4997:PID号 1:父进程PID号
-
是BSD风格.
UID:用户ID
PID:进程ID
PPID:父进程ID
C: CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数 值越小,表明进程是IO密集型运算,执行优先级会提高
STME:进程启动的时间
TTY:完整的终端名称
TIME: CPU 时间
CMD:启动进程所用的命令和参数
14.3 终止进程kill和killall
14.3.1介绍:
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。
14.3.2基本语法
kill [选项] 进程号 (功能描述:通过进程号杀死/终止进程)
kill all 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用) -----》他的子进程也会被杀死
14.3.3 常用选项
-9 :表示强迫进程立即停止
14.3.4最佳实践
(1) 案例1: 踢掉某个非法登录用户(先查看)
kill进程号,比如kill 11421
(2)案例2: 终止远程登录服务sshd,在适当时候再次重启sshd服务
kill sshd对应的进程号 ---》 kill 10748, 重启 /bin/systemctl start sshd. service
(3) 案例3:终止多个gedit(关闭多个gedit文本编译器(通过进程名称杀死)),演示 kllall gedit
(4) 案例4:强制杀掉一个终端,指令kill -9 bash 对应的进程号
14.4查看进程树pstree
14.4.1 基本语法
pstree [选项] ,可以更加直观的来看进程信息
14.4.2常用选项
-p :显示进程的PID
-u :显示进程的所属用户
14.4.3 应用实例:
案例1:请你树状的形式显示进程的pid
pstree -p
案例2:请你树状的形式进程的用户
pstree -u
14.5服务(service)管理
14.5.1 介绍:
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqId,sshd防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。[原理图]
14.5.2 service 管理指令
(1) service 服务名 [start | stop |restart | reload | status]
(2)在CentOS7.0后很多服务不再使用service,而是systemctl (后面专门讲)
(3) service 指令管理的服务在 /etc/init.d 查看
14.5.3 service管理指令案例
请使用service指令,查看,关闭,启动network [注意:在虚拟系统演示,因为网络连接会关闭]
指令:
service network status
service network stop
service network start
14.5.4 查看服务名:
方式1:使用setup-> 系统服务就可以看到全部。
setup(前面有*的为开机自启动,按空格键可取消)
方式2:
/etc/init.d看到service指令管理的服务
ls -l
/etc/init.d
14.5.5 服务的运行级别(runlevel):
Linux系统有7种运行级别(runlevel):常用的是级别3和5
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root 权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3:完全的多用户状态(有 NFS),无界面,登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5: X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
开机的流程说明:
14.5.6 CentOS7 后运行级别说明
在/etc/initab
进行了简化,如下:
multi-user. target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
# To view current default target, run:
systemctl get-default
# To set a default target, run:
systemctl set-default TARGET.target
14.5.7 chkconfig 指令
-
介绍
1.通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭
2.chkconfig指令管理的服务在/etc/init.d 查看
3.注意: Centos7.0后,很多服务使用systemnctl管理(后面马上讲)
-
chkconfig 基本语法
(1)查看服务chkconfig --list [| grep xxx]
(2) chkconfig 服务名 --list
(3) chkconfig --level 5 服务名 on/off
-
案例演示:对network 服务进行各种操作,把network在3运行级别,关闭自启动
chkconfig -level 3 network off
chkconfig -level 3 network on
-
使用细节
chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效
14.5.8 systemctl管理指令
基本语法: systemctl [start |stop |restart | status] 服务名
systemctl指令管理的服务在 /usr/lib/systemd/system 查看
ls -l /usr/lib/systemd/system
14.5.9 systemctl 设置服务的自启动状态
1.systemctl list-unit-files [ | grep 服务名(查看服务开机启动状态, grep可以进行过滤)
2.systemctl enable服务名(在3 5两个级别设置服务开机启动)
3.systemctl disable服务名(在3 5两个级别关闭服务开机启动)
4.systemctl is-enabled服务名(查询某个服务是否是自启动的)
14.5.10应用案例:
查看当前防火墙的状况,关闭防火墙和重启防火墙。=> frewalld.service
systemctl status firewalld; systemctl stop firewalld; systemctl start firewalld
14.5.11细节讨论:
关闭或者启用防火墙后,立即生效。[telnet 测试某个端口即可] telnet 192.168.111.2
这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
如果希望设置某个服务自启动或关闭永久生效,要使用systemctl [enable | disable] 服务名
14.5.12打开或者关闭指定端口
在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。比如80、22、8080 等【示意图】
14.5.13 firewall 指令
(1) 打开端口(把想要打开的端口放入打开端口框): firewall-cmd --permanent --add-port=端口号/协议
(2)关闭端 口: firewall-cmd --permanent --remove-port=端口号/协议
(3)重新载入,才能生效: firewall-cmd --reload
(4)查询端口是否开放: firewall-cmd --query-port=端口/协议
14.5.14 应用案例:
(1) 启用防火墙,测试111端口是否能telnet,不行
(2)开放111端口---->再次telnet连接就可以成功
firewall-cmd --permanent --add-port=111/tcp;需要firewall-cmd --reload
(3) 再次关闭111端口
firewall-cmd --permanent --remove-port=111/tcp;需要firewall-cmd -reload
14.6 动态监控进程
14.6.1 介绍:
top与ps命令很相似。它们都用来显示正在执行的进程。Top与ps最大的不同之处,在于top在执行一段时间可以.更新正在运行的的进程。
14.6.2基本语法
top [选项]
第一行
top:当前时间
up:机器运行了多长时间
users:当前登录用户数
load average:系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二行
Tasks:当前有多少进程
running:正在运行的进程数
sleeping:正在休眠的进程数
stopped:停止的进程数
zombie:僵尸进程数
第三行
us:用户空间占CPU的百分比(像shell程序、各种语言的编译器、各种应用、web服务器和各种桌面应用都算是运行在用户地址空间的进程,这些程序如果不是处于idle状态,那么绝大多数的CPU时间都是运行在用户态)
sy: 内核空间占CPU的百分比(所有进程要使用的系统资源都是由Linux内核处理的,对于操作系统的设计来说,消耗在内核态的时间应该是越少越好,在实践中有一类典型的情况会使sy变大,那就是大量的IO操作,因此在调查IO相关的问题时需要着重关注它)
ni:用户进程空间改变过优先级(ni是nice的缩写,可以通过nice值调整进程用户态的优先级,这里显示的ni表示调整过nice值的进程消耗掉的CPU时间,如果系统中没有进程被调整过nice值,那么ni就显示为0)
id: 空闲CPU占用率
wa: 等待输入输出的CPU时间百分比(和CPU的处理速度相比,磁盘IO操作是非常慢的,有很多这样的操作,比如,CPU在启动一个磁盘读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU只能处于空闲状态。Linux系统在计算系统平均负载时会把CPU等待IO操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过wa来判断系统的性能瓶颈是不是过多的IO操作造成的)
hi: 硬中断占用百分比(硬中断是硬盘、网卡等硬件设备发送给CPU的中断消息,当CPU收到中断消息后需要进行适当的处理(消耗CPU时间)。)
si:软中断占用百分比(软中断是由程序发出的中断,最终也会执行相应的处理程序,消耗CPU时间)
st:steal time “虚拟机管理程序从该虚拟机窃取的时间”
第四行
total:物理内存总量
free:空闲内存量
used:使用的内存量
buffer/cache:用作内核缓存的内存量
第五行
total:交换区内存总量
free:空闲交换区总量
used:使用的交换区总量
buffer/cache:缓冲的交换区总量
第六行
PID 进程id
USER 进程所有者的用户名
PR 优先级
NI nice值,负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR 共享内存大小,单位kb
S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行
14.6.3 进程说明
14.6.4 交互操作说明
运行top的时候直接输入对应子母
14.6.5应用实例
-
案例1.监视特定用户,比如我们监控tom用户
top:输入此命令,按回车键,查看执行的进程。
u:然后输入“u”回车,再输入用户名,即可,
-
案例2:终止指定的进程,比如我们要结束tom登录
top:输入此命令,按回车键,查看执行的进程。
k:然后输入“k”回车,再输入要结束的进程ID号
-
案例3:指定系统状态更新的时间(每隔10秒自动更新),默认是3秒.
top -d 10
14.7监控网络状态
14.7.1查看系统网络情况netstat
-
基本语法 : netstat [选项]
-
选项说明
-an 按一定顺序排列输出
-P 显示哪个进程在调用
Proto 连接协议的种类
Recv-Q 接收到字节数 Send-Q 从本服务器,发出去的字节数
Local Address 本地的IP地址,可以是IP,也可以是主机名
Foreign Address 远程主机的IP 地址
State 网络连接状态
网络连接状态
CLOSED : 初始(无连接)状态。
CLOSING:等待远程TCP对连接中断的确认
LISTEN : 侦听状态,等待远程机器的连接请求。
ESTABLISHED: 完成TCP三次握手后,主动连接端进入ESTABLISHED状态。此时,TCP连接已经建立,可以进行通信。
TIME_WAIT : 在TCP四次挥手时,主动关闭端发送了ACK包之后,进入TIME_WAIT状态,等待最多MSL时间,让被动关闭端收到ACK包。
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
CLOSE-WAIT:等待从本地用户发来的连接中断请求
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
-
应用案例
请查看服务名为sshd 的服务的信息。
netstat -anp | grep sshd
14.7.2检测主机连接命令ping:
是一种网络检测工具,它主要是用检测远程主机是否正常,或是两部主机间的网线或网卡故障。
如: ping对方ip地址