九,进程管理

78 阅读9分钟

一,介绍

  1. 在Linux中,**每个执行程序都称为一个进程。**每一个进程都会分配一个ID号(pid,进程号)

  2. 每个进程都可能以俩种方式存在的。分别是前台后台,所谓前台进程就是用户目前可以在屏幕上操作的。后台进程就是实际在操作但是屏幕是看不到的。

  3. 一般系统的服务都是以后台进程的方式存在,且常驻在系统中直到关机结束。

  4. 程序一旦运行并加载到内存就会产生进程

二,显示系统执行的进程

  • ps命令查看目前系统中,有哪些正在执行,以及他们的执行状况。可以不加任何参数

    用法

    ps -aux | more #来查看进程信息
    ps -aux | grep sshd  #查看有没有sshd服务
    
  • ps内的信息解释

    image

信息描述
USER进程执行用户
PID进程号
%CPU当前进程占用cpu百分比(单位kb)
%MEM占用物理内存的百分比(单位kb)
VSZ占用虚拟内存的百分比
TTY终端名称,缩写
STAT当前运行状态
START代表进程开始执行的时间点
TIME表示这个进程占用cpu时间
command表示启动进程所使用的命令和参数,过长会被截断

STAT的值:

  • S:睡眠

  • s:该进程是会话的先导进程

  • N:进程有比普通优先级更低的优先级

  • R:正在运行

  • D:短期等待

  • Z:僵死进程(程序已经关闭但是内存未释放,需要定时清除)

  • T:被跟踪或者被停止

三,父子进程

在Linux中进程可以生成多个子进程,这个进程就叫父进程。

ps -ef #以全格式显示当前所有的进程。
  • -e :显示所有进程

  • -f :全格式

以全格式方式查看sshd的进程信息

ps -ef | grep sshd

image

查看ps -ef的全格式信息

ps -ef | more

image

ps -ef中信息详解

信息描述
UID用户ID
PID进程ID
FPID父进程ID
CCPU用于计算执行优先级的因子,数值越大,表明进程是CPU密集型运算,执行优先级会降低。越小表面进程是I/O密集型运算,执行优先级越高
STIME进程启动的时间
TTY完整的终端名
TIMECPU时间
CMD启动进程所用的命令和参数

四,终止进程kill和killall

  • 介绍:如果某个进程执行一半需要停止。使用kill命令完成。

  • 基本语法:

    • 通过进程号杀死进程

      kill 选项 进程号
      
    • 通过进程名杀死进程

      killall 进程名
      

      ​ killall支持通配符,在系统因负载过大变得很慢时很有用。

  • kill常用选项

    表示强迫进程立刻停止。

    kill -9 PID
    
  • 案例:

    • 踢掉某个非法用户

      ps -aux | grep sshd #查看非法用户登录的进程号
      kill #对应的进程号
      
    • 终止远程登录服务sshd,在适当的时候重启sshd服务。

      ps -aux | grep /user/sbin/sshd -D  #查看sshd中的进程号
      kill sshd对应的进程号
      /bin/systemctl start sshd.service #重启sshd服务
      

      重启后进程号会发送变化,终止sshd服务后无法远程登录!

    • 终止多个gedit

      killall gedit
      

      gedit进程代表的是,打开文本编辑器产生的进程,关闭后就相当于强制退出了文本编辑,killall会杀死父进程+子进程

    • 杀死终端

    ps -aux | grep bash #查看终端进程号 kill -9 #终端对应的进程号

    
    终端就是相当于`cmd`命令框,系统会对杀死终端操作认为是误操作,会无视,需要`-9`才能强制终止
    
    

五,pstree指令

查看进程树,更直观的查看进程的信息。

  • 基本语法

    pstree 选项
    
  • 常用选项

    • -p 显示进程的PID
    • -u 显示进程的所属用户

六,服务管理

  • 介绍

    服务管理本质就是进程,但是运行在后台的,通常会监听某个端口,等待其他程序的请求,比如(mysqld,sshd,防火墙等)故我们又称为守护进程。image

6.1 service管理指令

service 服务名 [start|stop|restart|reload|status]

status是查看状态

在CentOS7.0后很多服务不再使用service而是systemctl了,还继续使用service管理的指令可在 /etc/init.d 目录中中查看

  • 查看服务名

    setup
    

    其中[*]代表会随着系统自启,按q进去确定与取消选项处

6.2 服务的运行级别(runlevel)

  • Linux系统有7种运行级别(runlevel)常用的是35

    运行级别说明
    0系统停机状态,默认运行级别不能设置为0,否则无法正常启动。
    1单用户工作状态,root权限,用于系统维护,禁止远程登录。
    2多用户状态(无NFS),不支持网络。
    3完全多用户状态,支持网络,登录后进入命令行模式。
    4系统未使用,保留。
    5X11控制台,登录后进入GUI模式
    6系统正常关闭并重启,默认不能设置为6,否则无法正常启动。
  • 开机流程

    开机--->BIOS-->/boot--->systemd进程1-->运行级别--->运行级别对应的服务

6.2.1 运行级别的指令

/etc/inittab下可以设置运行级别,或者使用指令设置运行级别。

查看当前运行级别

systemctl get-default

设置运行级别

systemctl set-default 运行级别.target

multi-user.target 是level 3

6.2.2 chkconfig指令

  • 介绍:
    1. 通过chkconfig 命令可以给服务器的各个运行级别设置 自动启动/关闭。
    2. chkconfig 指令管理的服务在/etc/init.d查看
    3. 在Centos7.0之后,多数服务使用systemctl管理了
  • chkconfig基本语法

查看全部服务在每个运行级别下的状态

chkconfig --list

查看具体服务在哪些运行级别是打开的哪些是关闭的

chkconfig 服务名 --list

设置服务在0~5的运行级别的状态是打开还是关闭

chkconfig --level n 服务名 on/off

每一个服务都有0~5六个运行级别,打开了对应的运行级别之后,他就会在对应的运行级别自启动并生效。

chkconfig设置后需要重启才能生效。

6.3 systemctl服务管理

6.3.1 systemctl管理指令

基本语法(临时生效,重启就恢复)

systemctl [start | stop | restart | status ] 服务名

systemctl指令管理的服务在 /usr/lib/systemd/system中查看

systemctl设置服务的自启动状态

  1. 查看服务的开机启动状态(可以用grep过滤)

    systemctl list-unit-files [| grep 服务名]
    
  2. 设置服务开机启动(永久生效)

    systemctl enable 服务名
    
  3. 关闭服务开机启动(永久生效)

    systemctl disable 服务名
    
  4. 查询某个服务是否自启动

    systemctl is-enabled 服务名字
    

举例:查看当前防火墙状态

  1. 查看防火墙的服务名

    ls -l /usr/lib/systemd/system | grep fire
    
  2. 查询防火墙服务当前状态

    systemctl list-unit-files | grep firewalld
    

    注意:

    1. 防火墙服务全名是firewalld.service,设置不能写一半fire必须写齐firewalld
    2. 关闭,启动,防火墙后,会立即生效
    3. 这种方式只是临时的生效,重启后还是会复原
    4. 如果希望永久生效要使用 systemctl enable|disable 服务名而不是systemctl start 服务名

防火墙可以简单理解为在监听端口前建立了一个墙。外来程序要先访问防火墙才能进入端口。如果防火墙没有打开对应端口就无法访问。

大概如图:

image

6.3.2 打开或关闭指定端口(firewall指令)

在真正的生产环境,防火墙必须是开启,故需要了解如何打开和关闭对应的端口。

打开端口

firewall-cmd --permanent --add-port=端口号/协议

关闭端口

firewall-cmd --permanent --remove-port=端口号/协议

打开或关闭后需要重载才能生效

重载

firewall-cmd --reload

查询端口是否开放

firewall-cmd --query-port=端口/协议

查看端口绑定的协议

netstat -anp | more

端口在 /etc/services中,可以自己设置或者进去查看

七,动态监控进程(top)

  • 介绍
    • top和ps命令类似,都是用来显示正在运行的进程。
    • 与ps不同的是top可以在执行一段时间就更新正在运行的进程。

7.1 基本语法

top 选项
  • 选项说明
选项功能
-d 秒数指定top指令每隔几秒更新,默认3s
-i让top不显示任何闲置或者僵死的进程
-p 进程号通过指定监控进程id来仅仅监控某个进程状态

7.2 top指令下内容详解

image

选项解释
PID进程号
USER哪个用户在执行
%CPU进程执行占cpu百分比
%MEM占用物理内存的百分比(单位kb)
TIME+进程在何时启动
COMMAND启动进程所用的命令和参数
  1. 第一行

    • top - 12:37:57代表当前系统时间

    • 34 min是系统运行时间

    • 2 users代表系统用户数量

    • load average : 0.02,0.06,0.05 负载值,0.02+0.06+0.05/3 < 0.7 就没问题,> 0.7 就负载过大

  2. 第二行

    • Tasks:324 total ,1 running,323 sleeping 0 stopped 0 zombie
    • 代表系统的任务数量有324个其中1个在运行,323个在休眠,0个停止了,0个在僵死状态
  3. 第三行

    • %Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    • 0.0 us 代表 用户占用cpu为0.0,0.2 sy是系统占用cpu 0.2 ,99.7 id是空闲cpu
  4. 第四行

    • KiB Mem : 2028116 total, 541176 free, 819908 used, 667032 buff/cache
    • Mem是内存占用情况,总体大约2G,大约0.5G在空闲,大约0.8个G在使用,buff用了0.6G
  5. 第五行

    • KiB Swap: 2097148 total, 2097148 free, 0 used. 965996 avail Mem

    • SWAP分区,共2G,空闲2G,使用0G,可获取0.9G

7.3 top指令的交互操作

在执行完top 选项指令后可以在键盘上按对应的键对top显示的内容进行交互操作。

操作功能
P以CPU使用率排序,默认此项
M以内存使用率排序
N以PID排序
q退出top
按u回车,然后输入用户监控指定用户
按k再回车,输入要结束的进程号,回车终止指定进程

八,监控网络状态(netstat)

8.1 语法

netstat 选项

常用选项

netstat -an #按一定顺序排序输出
netstat -p   #显示进程名和基础号

常用方法:

netstat -anp | more或grep 指定进程pid

8.2 netstat内容详解

image

选项解释
Proto协议
Local Address本地地址
Foreign Address外部地址
State状态,ESTABLISHED代表建立连接,LISTEN代表正在监听,TIME_WAIT代表超时等待
Recv-Q接受到数据
Send-Q发生的数据

Local Address和 Foreign Address的关系

image

8.3 检测主机连接命令(ping)

主要是检测远程主机是否正常,或俩部主机之间的网卡。

基本语法

ping 对方ip