day015-进程管理

1. 服务开机自启动

  • /etc/rc.d/rc.local:用于在系统启动时执行自定义命令或脚本。
  • 将服务的启动命令写入该文件即可,要有执行权限。
  • Ubuntu:/etc/rc.local。需要自己创建文件。

2. 进程

  • 程序/软件运行后就是进程
  • 进程在内存中运行
  • 守护进程/服务:一直运行的进程

3. 僵尸进程

在这里插入图片描述

  • 进程因为一些原因脱离系统控制,但是进程又没有正常退出,并一直占用系统的资源(cpu、内存),这种就是僵尸进程。
  • 僵尸进程处于运行中但是不受控制。
  • 僵尸进程要及时排查与处理,否则僵尸进程增多会导致系统大量资源被占用,系统负载变高。

在这里插入图片描述

3.1 处理僵尸进程

  • kill或kill -9一般对僵尸进程是失效的,kill 命令的作用是向进程发送信号(如 SIGKILL),但僵尸进程无法响应信号(因为它已经死了)。
  • 结束僵尸进程的父进程:
  • 1.如果僵尸进程的父进程是主进程(pid=1),则只能重启Linux(在业务低谷期)。
  • 2.如果僵尸进程的父进程不是主进程,通过kill命令结束父进程即可。

3.2 查看僵尸进程

  • top

在这里插入图片描述

  • 过滤出系统中的僵尸进程
  • 程序状态Z表示是僵尸进程
[root@oldboy99-Kylin ~]# ps aux |grep 'Z'
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        3927  0.0  0.0      0     0 pts/0    Z    17:47   0:00 [zombie] <defunct>
root        3937  0.0  0.0 213140   880 pts/0    S+   17:50   0:00 grep --color Z
# 取第8列中含有‘Z’的行
[root@oldboy99-Kylin ~]# ps aux |awk '$8~/Z/'
root        3927  0.0  0.0      0     0 pts/0    Z    17:47   0:00 [zombie] <defunct>

3.2 排查与结束僵尸进程全流程

# 1.检查是否有僵尸进程
top
# 2.查看哪个进程是僵尸进程,记录下pid
ps aux |grep 'Z'
# 3.查看僵尸进程的上级进程
pstree -p
ps -ef # 查看第3列
# 4.如果上级进程不是主进程
kill + pid结束进程

4. 孤儿进程

  • 某个子进程的父进程,因为特殊原因退出了,但是子进程还在。这个子进程就是孤儿进程。
  • 对系统影响不大
  • 解决:重启服务

在这里插入图片描述

5. 进程管理

5.1 kill三剑客

命令说明
killkill pid:结束对应的进程;
kill -9:强制结束进程(-9是一种信号)
pkill根据进程名字过滤结束进程,很有可能误杀进程
killall根据名字终结进程

5.2 后台运行

  • 前台运行:命令在命令行中运行,无法执行其他命令。需要等待。
  • 后台运行:一些命令在前台运行的时候连接断开或网络断开,前台运行的命令会结束。后台运行的命令则没有影响。
后台运行说明
命令 &后台运行,远程连接断开也会结束
nohup 命令 &后台运行,连接断开也不结束,默认会把结果输出到当前目录下nohup.out文件中
devops01@sunkexu-aliyun:~$ nohup ping qq.com >> qqlog.txt &
[1] 18148
devops01@sunkexu-aliyun:~$ nohup: ignoring input and redirecting stderr to stdout

devops01@sunkexu-aliyun:~$ tail -f qqlog.txt  
PING qq.com (203.205.254.157) 56(84) bytes of data.
64 bytes from 203.205.254.157 (203.205.254.157): icmp_seq=3 ttl=44 time=124 ms
64 bytes from 203.205.254.157 (203.205.254.157): icmp_seq=5 ttl=44 time=124 ms
……

6. 进程监控命令

  • ps:查看进程静态信息
  • top:查看进程动态、静态信息

6.1 ps

6.1.1 ps -ef

在这里插入图片描述

6.1.2 ps aux

在这里插入图片描述

6.1.3 VSZ、RSS

1.swap是什么?

交换分区(虚拟内存):物理内存不足的时候,swap临时充当内存,防止系统崩溃。

2.VSZ,RSS 单位kb

VSZ(virtual size)表示系统内存总大小:swap+物理内存;

RSS表示实际物理内存大小。

6.1.4 进程状态

进程状态符(STAT)说明
Zzombie,僵尸进程
Rrunning,运行中
Ssleeping,睡眠状态。程序正在等待某个资源,一旦获取就会进入运行状态。
D不可中断的休眠;进程正在等待某些系统调用的完成(IO操作)
T后台挂起(暂停)的进程(ctrl+z)
+前台运行的进程
s表示该进程是主进程
l表示该进程支持线程
<表示该进程拥有高优先级

6.1.5 进程、线程

  • 进程:process,运行的程序或软件就相当于1个进程。进程就像一个公司,用于独立的资源(cpu/内存/文件)
  • 线程:thread,线程是进程中的执行单元。线程就像公司中的一个一个的员工,共享公司的资源(内存/文件)

6.2 top

  • top是交互式命令,不适合直接过滤

在这里插入图片描述

6.2.1 cpu使用情况的各种指标:

指标单词说明
ususer用户程序占用的cpu时间百分比
sysystem系统内核程序占用的cpu时间百分比
ninice低优先级用户进程占用的cpu时间百分比
ididle(空闲)cpu空闲时间百分比
waiowaitcpu等待IO操作完成的时间百分比
hihardware irq(硬件中断)硬件中断(键盘、磁盘响应)占用的cpu时间百分比
sisoftware irq(软件中断)软件中断(如网络数据包处理)占用的cpu时间百分比
ststeal(偷走)虚拟机被宿主机‘偷走’的cpu时间百分比
(仅在虚拟环境出现,表示资源被其他虚拟机占用)

6.2.2 top命令快捷键

快捷键说明
M按内存使用率排序
P按cpu使用率排序
空格立刻更新
1显示所有cpu核心的使用情况
z(小写),x(小写),用 <或>选择列显示颜色,可选择不同的列排序

6.3 htop

在这里插入图片描述

  • 可直接用鼠标选择不同的列排序

7. ps、top应用案例

7.1 过滤出叫crond/sshd的进程

[root@oldboy99-Kylin ~]# ps -ef |grep -E 'sshd|crond'
root         842       1  0 12:58 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root         862       1  0 12:58 ?        00:00:00 /usr/sbin/crond -n
root         883     842  0 12:58 ?        00:00:00 sshd: root [priv]
root        1154     883  0 12:58 ?        00:00:01 sshd: root@pts/0
root        1817    1159  0 14:51 pts/0    00:00:00 grep --color -E sshd|crond
  • 执行当前命令也是一个进程,所以把当前命令也过滤出来了。
  • 解决方法:使用正则表达式,将过滤参数的第一个字母加上中括号
[root@oldboy99-Kylin ~]# ps -ef |grep -E '[s]shd|[c]rond'
root         842       1  0 12:58 ?        00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root         862       1  0 12:58 ?        00:00:00 /usr/sbin/crond -n
root         883     842  0 12:58 ?        00:00:00 sshd: root [priv]
root        1154     883  0 12:58 ?        00:00:01 sshd: root@pts/0
  • 原理:加上中括号,就是[s]shd,就不会匹配sshd了。

7.2 过滤sshd进程数量

[root@oldboy99-Kylin ~]# ps -ef |grep -E 'sshd|crond' |grep -v 'grep' |wc -l
4
[root@oldboy99-Kylin ~]# ps -ef |grep -E '[s]shd|[c]rond' |wc -l
4
  • 推荐直接使用方法二。

7.3 输出rsyslog进程的pid

[root@oldboy99-Kylin ~]# ps -ef |grep '[r]syslog' |awk '{print $2}'
891

7.4 top命令非交互模式与过滤指定内容

  • top命令默认是交互模式便于展示结果,但是不方便进行过滤或查找。
  • top -bn1 :非交互式模式,显示1次top信息
  • -b:batch,显示当前所有信息
  • -n:显示多少次

在这里插入图片描述

7.5 取出系统登录用户数量

[root@oldboy99-Kylin ~]# w |awk 'NR==1{print $4}'
1
[root@oldboy99-Kylin ~]# top -bn1 |grep 'user' |awk '{print $6}'
1

7.6 取出僵尸进程数量

[root@oldboy99-Kylin ~]# top -bn1 |grep 'zombie' |awk '{print $(NF-1)}'
0

8. 思维导图

【金山文档】 思维导图 https://www.kdocs.cn/l/co3I7PtpTYQX

9. 踩坑记录

9.1 为啥有些命令选项有没有‘-’都行(tar ,ps aux),而有些命令选项有无‘-’差异很大(ps -ef)?

  • 选项前的‘-’表示语法分隔符,它的作用并不统一,而是受命令作者或不同命令语法标准的影响。
  • GNU的命令强制规定加‘-’
  • 早先unix风格的命令选项一般不加‘-’

9.2 ps -ef和ps ef的差别?

  • ps -ef:显示所有进程及信息
  • ps ef:以进程树的形式显示进程信息,一般不用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙克旭​‌​

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值