百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

杀死僵尸进程,你需要这些神奇高效的Linux命令行

liebian365 2024-10-17 14:05 23 浏览 0 评论

Linux 高手,其实都是玩儿命令行很熟练的人。


命令行的学习捷径

Linux 命令有许多强大的功能:从简单的磁盘操作、文件存取,到进行复杂的多媒体图像和流媒体文件的制作,都离不开命令行。

在 Linux 的学习中,新手都会遇到这么一个问题

自己对系统的每个命令都很熟悉,但是在系统出现故障的时候,就无从下手了。

说到底,就是学习的理论知识没有很好地与系统实际操作相结合。

5 大系统运维状态

对运维来说,查看系统运行状态是最基础的工作之一。

要了解 CPU、内存、进程、磁盘、网络,这五大运维系统的运行状态,需要掌握的运维命令有 ls、ps、free、top、uptime、ifconfig、su/sudo、dmesg、iostat、vmstat、sar、htop、iotop、smem 等命令。

这些命令有的非常简单,不做过多介绍,重点介绍几个高效、神奇的命令,它能帮助我们快速了解系统运行状态,绝对是运维神器。

典型 Linux 命令行:

Linux 使用到了虚拟内存,因此要准确的计算一个进程实际使用的物理内存就不是那么简单。

Smem 是一款命令行下的内存使用情况报告工具,它能够给用户提供 Linux 系统下的内存使用的多种报告。


内存状态检测工具:

要安装 smem 这个工具,需要在系统上安装EPEL软件源,安装过程如下:

[root@localhost ~]# yum install epel-release[root@localhost ~]# yum install smem python-matplotlib python-tk

要显示系统中每个进程的占用内存状态,可执行如下图指令:

上图中,“-k”参数用来显示内存单位,“-s”是排序,uss 是对 uss 列进行排序,这样,就输出了系统中所有进行占用的内存大小,非常清晰明白。

smem 还支持以百分比形式显示每个进程占用系统内存的比率,如下图所示:

其中,“-p”表示以百分比的形式报告内存使用情况,这样每个进程占用的系统内存比重一目了然。

smem 还可以显示系统中每一个用户的内存使用情况,如下图所示:

其中,“-u”表示显示用户占用内存信息。

最后,smem 还支持查看某个进程占用内存大小,例如:

smem -P nginx

smem -k -P nginx

由此可知,通过 smem,对每个进程占用的内存资源可以很轻松的获取。绝对是运维必备工具。

CPU/内存占用进程

这个应用需求在服务器的问题排查和故障处理上使用率非常高,要获取这些信息,只需要一些命令组合即可实现,可以说非常简单。

首先,获取当前系统占用 CPU 最高的前 10 个进程最简单的方式是通过 ps 命令组合实现,例如:

[root@localhost ~]# ps aux|head -1;ps aux|sort -rn -k3|head -10

其中,第一句主要是为了获取标题(USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND)信息。而“head:-N”可以指定显示的行数,默认显示 10 行。

第二个命令是一个输出加排序组合,ps 参数的 a 指代 all,表示所有的进程,u 指代 user id,就是执行该进程的用户 id,x 指代显示所有程序,不以终端机来区分。

接下来是 sort 命令,其中:r 指代 reverse,这里是指反向比较结果,输出时默认从小到大,反向后从大到小。n 指代 numberic sort,根据其数值排序。k 代表根据哪一列进行排序,后面的数字 3 表示按照第 3 列排序。本例中,可以看到 %CPU 在第 3 个位置,因此 k3 表示根据 %CPU 的数值进行由大到小的排序。

接下来的“|”为管道符号,将查询出的结果导到下面的命令中进行下一步的操作。

最后的“head -10”命令获取默认前 10 行数据。


清除僵尸过程:

一个僵尸进程产生的过程是:父进程调用 fork 创建子进程后,子进程运行直至其终止,它立即从内存中移除,但进程描述符仍然保留在内存中。

要查找系统中的僵尸进程,有多种方法,这里给出一种命令行探测僵尸进程的方法:

[root@localhost ~]# ps -e -o stat,ppid,pid,cmd | egrep '^[Zz]'Z 10808 10812 [java] <defunct>

介绍下几个参数:

-e:参数用于列出所有的进程

-o:参数用于设定输出格式,这里只输出进程的 stat(状态信息)、ppid(父进程 pid)、pid(当前进程的 pid),cmd(即进程的可执行文件)。

egrep:是 Linux 下的正则表达式工具。

'^[Zz]':这是正则表达式,^表示第一个字符的位置,[Zz] 表示小写 z 或者大写的 Z 字母,即表示第一个字符为 Z 或者 z 开头的进程数据,之所以这样是因为僵尸进程的状态信息以 Z 或者 z 字母开头。

找到僵尸进程的 pid 后,直接通过“kill -9 pid”命令杀掉即可,但是如果僵尸进程很多的话,就会很繁琐,因此,还需要一个批量删除僵尸进程的办法:

[root@localhost ~]# ps -e -o stat,ppid,pid,cmd | grep -e '^[Zz]' | awk '{print $2}' | xargs kill -9

这是个命令组合,通过管道实现命令的组合应用。

“grep -e”相当于 egrep 命令。

“awk '{print $2}' ”是将前面命令的输出信息进行过滤,仅仅输出第二列的值,而第二列就是进程的 ppid。

“xargs kill -9”这是将得到的 ppid 传给“kill -9”作为参数,也就是 kill 掉这些 ppid。xargs 命令可以将标准输入转成各种格式化的参数,这里是将管道的输出内容作为参数传递给 kill 命令。

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符&quot;

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: