day015-进程管理

news2025/5/18 23:11:12

文章目录

  • 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 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:以进程树的形式显示进程信息,一般不用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2378845.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

POWER BI添加自定义字体

POWER BI添加自定义字体 POWER BI内置27种字体&#xff0c;今天分享一种很简单的添加自定义字体的方法。以更改如下pbix文件字体为例&#xff1a; 第一步&#xff1a;将该pbix文件重命名为zip文件并解压&#xff0c;找到主题json文件&#xff0c;如下图所示&#xff1a; 第二步…

协议不兼容?Profinet转Modbus TCP网关让恒压供水系统通信0障碍

在现代工业自动化领域中&#xff0c;通信协议扮演着至关重要的角色。ModbusTCP和Profinet是两种广泛使用的工业通信协议&#xff0c;它们各自在不同的应用场合中展现出独特的优势。本文将探讨如何通过开疆智能Profinet转Modbus TCP的网关&#xff0c;在恒压供水系统中实现高效的…

ChatGPT + DeepSeek 联合润色的 Prompt 模板指令合集,用来润色SCI论文太香了!

对于非英语母语的作者来说,写SCI论文的时候经常会碰到语法错误、表达不够专业、结构不清晰以及术语使用不准确等问题。传统的润色方式要么成本高、效率低,修改过程又耗时又费力。虽然AI工具可以帮助我们来润色论文,但单独用ChatGPT或DeepSeek都会存在内容泛泛、专业性不足的…

全栈项目搭建指南:Nuxt.js + Node.js + MongoDB

全栈项目搭建指南&#xff1a;Nuxt.js Node.js MongoDB 一、项目概述 我们将构建一个完整的全栈应用&#xff0c;包含&#xff1a; 前端&#xff1a;Nuxt.js (SSR渲染)后端&#xff1a;Node.js (Express/Koa框架)数据库&#xff1a;MongoDB后台管理系统&#xff1a;集成在同…

RAGFlow Arbitrary Account Takeover Vulnerability

文章目录 RAGFlowVulnerability Description[1]Vulnerability Steps[2]Vulnerability Steps[3]Vulnerability Steps RAGFlow RAGFlow is an open-source RAG (Retrieval-Augmented Generation) engine developed by Infiniflow, focused on deep document understanding and d…

Python 之 Flask 入门学习

安装 Flask 在开始使用 Flask 之前&#xff0c;需要先安装它。可以通过 pip 命令来安装 Flask&#xff1a; pip install Flask创建第一个 Flask 应用 创建一个简单的 Flask 应用&#xff0c;只需要几行代码。以下是一个最基本的 Flask 应用示例&#xff1a; from flask imp…

【Ragflow】22.RagflowPlus(v0.3.0):用户会话管理/文件类型拓展/诸多优化更新

概述 在历经三周的阶段性开发后&#xff0c;RagflowPlus顺利完成既定计划&#xff0c;正式发布v0.3.0版本。 开源地址&#xff1a;https://github.com/zstar1003/ragflow-plus 新功能 1. 用户会话管理 在后台管理系统中&#xff0c;新增用户会话管理菜单。在此菜单中&…

使用PocketFlow构建Web Search Agent

前言 本文介绍的是PocketFlow的cookbook中的pocketflow-agent部分。 回顾一下PocketFlow的核心架构&#xff1a; 每一个节点的架构&#xff1a; 具体介绍可以看上一篇文章&#xff1a; “Pocket Flow&#xff0c;一个仅用 100 行代码实现的 LLM 框架” 实现效果 这个Web S…

记录:echarts实现tooltip的某个数据常显和恢复

<template><div class"com-wapper"><div class"func-btns"><el-button type"primary" plain click"showPoint(2023)">固定显示2023年数据</el-button><el-button type"success" plain cli…

八股文--JVM(1)

⭐️⭐️JVM内存模型 程序计数器&#xff1a;可以看作是当前线程所执行的字节码的行号指示器&#xff0c;用于存储当前线程正在执行的 Java 方法的 JVM 指令地址。如果线程执行的是 Native 方法&#xff0c;计数器值为 null。是唯一一个在 Java 虚拟机规范中没有规定任何 OutOf…

从RPA项目说说RPC和MQ的使用。

去年我负责一个 RPA&#xff08;机器人流程自动化&#xff09;项目&#xff0c;帮某电商公司搭建订单处理系统。项目里有个场景特别有意思&#xff1a;当用户下单后&#xff0c;系统需要同时触发库存扣减、物流调度、积分发放三个模块。一开始我们想都没想&#xff0c;直接用 R…

UUG杭州站 | 团结引擎1.5.0 OpenHarmony新Feature介绍

PPT下载地址&#xff1a;https://u3d.sharepoint.cn/:b:/s/UnityChinaResources/EaZmiWfAAdFFmuyd6c-7_3ABhvZoaM69g4Uo2RrSzT3tZQ?e2h7RaL 在2025年4月12日的Unity User Group杭州站中&#xff0c;Unity中国OpenHarmony技术负责人刘伟贤带来演讲《团结引擎1.5.0 OpenHarmony新…

Vue3——父子组件通信

在Vue开发中&#xff0c;组件通信是核心概念之一。良好的组件通信机制能让我们的应用更加清晰、可维护。 父传子defineProps defineProps是一个编译时宏&#xff0c;仅在内部可用&#xff0c;不需要显式导入。声明的 props 会自动暴露给模板。 还返回一个对象&#xff0c;其中…

游戏引擎学习第276天:调整身体动画

运行游戏&#xff0c;演示我们遇到的拉伸问题&#xff0c;看起来不太好&#xff0c;并考虑切换到更顶视角的视角 我们开始讨论游戏开发中的一些美学决策&#xff0c;特别是在处理动画方面。虽然我们是游戏程序员&#xff0c;通常不负责设计或艺术部分&#xff0c;但因为这是一…

从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB

作者&#xff1a; Lucien-卢西恩 原文来源&#xff1a; https://tidb.net/blog/e7034d1b Java 应用开发技术发展历程 在业务开发早期&#xff0c;用 Java 借助 JDBC 进行数据库操作&#xff0c;虽能实现基本交互&#xff0c;但需手动管理连接、编写大量 SQL 及处理结果集&a…

Mipsel固件Fuzzing小记

Mipsel固件Fuzzing小记 0x01 准备 1.1 安装必要工具链 首先需要安装 MIPS 交叉编译工具链和相关依赖&#xff1a; sudo apt-get install -y gcc-mipsel-linux-gnu g-mipsel-linux-gnu binwalk qemu-user-static afl这些工具分别用于&#xff1a;交叉编译、固件解包、二进制…

本土DevOps革命:Gitee如何撬动中国企业的数字化转型新动能

在数字化浪潮席卷全球的背景下&#xff0c;中国企业正面临前所未有的转型压力与机遇。随着《数据安全法》和《个人信息保护法》的全面实施&#xff0c;以及信创产业政策的深入推进&#xff0c;研发工具链的自主可控已成为关乎企业核心竞争力的战略命题。在这一关键赛道上&#…

强化学习入门:马尔科夫奖励过程二

文章目录 前言1、动作2、策略总结 前言 最近想开一个关于强化学习专栏&#xff0c;因为DeepSeek-R1很火&#xff0c;但本人对于LLM连门都没入。因此&#xff0c;只是记录一些类似的读书笔记&#xff0c;内容不深&#xff0c;大多数只是一些概念的东西&#xff0c;数学公式也不会…

JVM 双亲委派机制

一、从 JDK 到 JVM&#xff1a;Java 运行环境的基石 在 Java 开发领域&#xff0c;JDK&#xff08;Java Development Kit&#xff09;是开发者的核心工具包。它不仅包含了编译 Java 代码的工具&#xff08;如 javac&#xff09;&#xff0c;还内置了 JRE&#xff08;Java Run…

uniapp -- uCharts 仪表盘刻度显示 0.9999999 这样的值问题处理。

文章目录 🍉问题🍉解决方案🍉问题 在仪表盘上,23.8变成了 23.799999999999997 🍉解决方案 formatter格式化问题 1:在 config-ucharts.js 或 config-echarts.js 配置对应的 formatter 方法 formatter: {yAxisDemo1: function (