当前位置: 首页 > article >正文

day015-进程管理

文章目录

  • 1. 服务开机自启动
  • 2. 进程
  • 3. 僵尸进程
    • 3.1 处理僵尸进程
    • 3.2 查看僵尸进程
    • 3.2 排查与结束僵尸进程全流程
  • 4. 孤儿进程
  • 5. 进程管理
    • 5.1 kill三剑客
    • 5.2 后台运行
  • 6. 进程监控命令
    • 6.1 ps
      • 6.1.1 ps -ef
      • 6.1.2 ps aux
      • 6.1.3 VSZ、RSS
      • 6.1.4 进程状态
      • 6.1.5 进程、线程
    • 6.2 top
      • 6.2.1 cpu使用情况的各种指标:
      • 6.2.2 top命令快捷键
    • 6.3 htop
  • 7. ps、top应用案例
    • 7.1 过滤出叫crond/sshd的进程
    • 7.2 过滤sshd进程数量
    • 7.3 输出rsyslog进程的pid
    • 7.4 top命令非交互模式与过滤指定内容
    • 7.5 取出系统登录用户数量
    • 7.6 取出僵尸进程数量
  • 8. 思维导图
  • 9. 踩坑记录
    • 9.1 为啥有些命令选项有没有‘-’都行(tar ,ps aux),而有些命令选项有无‘-’差异很大(ps -ef)?
    • 9.2 ps -ef和ps ef的差别?

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 stdoutdevops01@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:以进程树的形式显示进程信息,一般不用
http://www.lryc.cn/news/2378845.html

相关文章:

  • traceroute命令: -g与-i 参数
  • POWER BI添加自定义字体
  • SpringAI更新:废弃tools方法、正式支持DeepSeek!
  • 协议不兼容?Profinet转Modbus TCP网关让恒压供水系统通信0障碍
  • ChatGPT + DeepSeek 联合润色的 Prompt 模板指令合集,用来润色SCI论文太香了!
  • 全栈项目搭建指南:Nuxt.js + Node.js + MongoDB
  • RAGFlow Arbitrary Account Takeover Vulnerability
  • Python 之 Flask 入门学习
  • 微服务,服务粒度多少合适
  • 【Ragflow】22.RagflowPlus(v0.3.0):用户会话管理/文件类型拓展/诸多优化更新
  • 使用PocketFlow构建Web Search Agent
  • 安卓基础(Bitmap)
  • 记录:echarts实现tooltip的某个数据常显和恢复
  • 八股文--JVM(1)
  • 从RPA项目说说RPC和MQ的使用。
  • 【大模型面试每日一题】Day 21:对比Chain-of-Thought(CoT)与Self-Consistency在复杂推理任务中的优劣
  • UUG杭州站 | 团结引擎1.5.0 OpenHarmony新Feature介绍
  • Vue3——父子组件通信
  • 游戏引擎学习第276天:调整身体动画
  • 从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
  • Mipsel固件Fuzzing小记
  • 本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能
  • 关于此站点更改通知.top域名后期将统一更换为snowytime.cn访问,其余top访问进入过渡期
  • 使用python进行人员轨迹跟踪
  • 强化学习入门:马尔科夫奖励过程二
  • JVM 双亲委派机制
  • uniapp -- uCharts 仪表盘刻度显示 0.9999999 这样的值问题处理。
  • BGP团体属性
  • Redis——三大策略
  • Windows 操作系统使用 Tcping 命令检查目标主机端口是否开放