【Linux】进程7——查看进程

news2024/9/28 15:29:26

1.为什么进程管理这么重要呢?

这是因为:

  1. 首先,我们在操作系统时的各项任务其实都是经过某个PID来完成的(包括你的bash环境),因此,能不能执行某项任务,就与该进程的权限有关了。
  2. 再来,如果您的Linux系统是个很忙碌的系统,那么当整个系统资源快要被使用光时,您是否能够找出最耗系统的那个进程,然后删除该进程,让系统恢复正常?
  3. 此外,如果由于某个程序写的不好,导致在内存当中产生一个有问题的进程,您又该如何找出它,然后将它删除?
  4. 如果同时有五六项任务在您的系统当中运行,但其中有一项任务才是最重要的,该如何让那一项重要的任务被最优先执行?

所以,一个称职的系统管理员,必须要熟悉进程的管理流程才行,否则当系统发生问题时,还真
是很难解决问题。下面我们会先介绍如何查看进程与进程的状态,然后再加以控制。

2.查看进程

既然进程这么重要,那么我们如何查看系统上面正在运行当中的进程呢?

很简单,可以利用静态的ps或是动态的top命令,还可以利用pstree来查看进程树之间的关系。

2.1.ps:将某个时间点的进程运行情况撷取下来

  • root@study~]#ps aux  <==查看系统所有的进程
  • [root@study ~]# ps -lA  <==也是能够查看所有系统的进程
  • [root@study~]# ps axjf<==连同部分进程树状态。

选项和参数:

  • -A:所有的进程均显示出来,与-e具有同样的效果。
  • -a:不显示与终端有关的所有进程。
  • -u:有效使用者(effective user)相关的进程
  • x:通常与a这个参数一起使用,可列出较完整信息。

输出格式规划:

  1. l:较长、较详细的将该 PID的的信息列出。
  2. j:任务的格式(jobs format)。
  3. -f:做一个更为完整的输出。

个人认为ps这个命令的man page不是很好看,因为很多不同的UNIX都使用这个ps来查看进程状态。由于要符合不同版本的需求,所以这个man page写得非常庞大。

        因此,通常都会建议你,直接背两个比较不同的选项,一个是只能查看自己 bash 进程的【ps -l】,另一个则是可以查看所有系统运行的进程的【ps aux】。注意,你没看错,是【ps aux】,没有那个减号(-)。先来看看如何查看自己bash进程的状态:

2.1.1.仅查看自己的 bash 相关进程:ps  -l

范例一:将目前属于您自己这次登录的PID与相关信息列示出来(只与自己的bash有关)。

从这个ps -l 的分析,你也可以发现,系统整体运行的进程是非常多的,但使用ps -I仅会列出与你的操作环境(bash)有关的进程,即最上层的父进程会是你自己的bash而没有扩展到systemd(后续会介绍)这个进程中。

那么ps -l显示来的数据有哪些?我们就来看看:

F:代表这个进程标识(process flags),说明这个进程的权限,常见号码有:

  • 若为4表示此进程的权限为root。
  • 若为1表示此子进程仅执行复制(fork)而没有实际执行(exec)。

S:代表这个进程的状态(STAT),主要的状态有:

  • R(Running):该进程正在运行中。
  • S(Sleep):该进程目前正在睡眠状态(idle),但可以被唤醒(signal)。
  • D:不可被唤醒的睡眠状态,通常这个进程可能在等待I/O的情况(ex>打印)。
  • T:停止状态(stop),可能是在任务控制(后台暂停)或跟踪(traced)状态。
  • Z(Zombie):僵尸状态,进程已经终止但却无法被删除至内存外。

UID/PID/PPID:代表【此进程被该 UID所拥有/进程的PID号码/此进程的父进程PID号码】。

C:代表CPU使用率,单位为百分比。

PRI/NI:Priority/Nice的缩写,代表此进程被CPU所执行的优先级,数值越小代表该进程越快被CPU执行。

ADDR/SZ/WCHAN:都与内存有关,ADDR是kernel function,指出该进程在内存的哪个部分,如果是个running的进程,一般就会显示【-】;SZ代表此进程用掉多少内存;WCHAN表示目前进程是否运行,同样的,若为一表示正在运行中。

TTY:登录者的终端位置,若为远程登录则使用动态终端接口名称(pts/n)

TIME:使用的CPU时间,注意,是此进程实际花费CPU运行的时间,而不是系统时间。

CMD:就是command的缩写,表示造成此进程的触发进程的命令是什么。

所以你看到的ps  -l输出信息中,它说明的是:【bash的进程属于UID为0的用户,状态为睡眠(sleep),之所以为睡眠,是因为它触发了ps(状态为run)。此进程的PID为100772,优先执行顺序为80,执行bash所获取的终端接口为pts/0,运行状态为等待【wait)】,这样已经够清楚了吧?您自己尝试解析一下ps那一行代表的意义是什么?

接下来让我们使用ps 来查看一下系统内所有的进程状态。

2.1.2..查看系统所有进程:ps aux

范例二:列出目前所有的正在内存当中的进程。


………(中间省略)……



你会发现ps-1与ps aux显示的项目并不相同。

在ps aux显示的项目中,各字段的意义为:

  • USER:该进程属于所属用户账号;
  • PID:该进程的进程ID;
  • %CPU:该进程使用掉的CPU 资源百分比;
  • %MEM:该进程所占用的物理内存百分比;
  • VSZ:该进程使用掉的虚拟内存量(KB);
  • RSS:该进程占用的固定的内存量(KB);
  • TTY:该进程是在哪个终端上面运行,若与终端无关则显示?(问号)?另外,tty1-ty6是本机上面的登录进程,若为pts/0等,则表示是由网络连接进入主机的进程;
  • STAT:该进程目前的状态,状态显示与ps  -I的S标识相同(R/S/T/Z);
  • START:该进程被触发启动的时间;
  • TIME:该进程实际使用CPU运行的时间;
  • COMMAND:该进程的实际命令是什么;

一般来说,ps aux 会依照 PID的顺序来排序显示,我们还是以PID为100773的那行来说明。

该行的意义为【zs_108执行的bash PID为14836,占用了0.1%的内存容量,状态为休眠(Ss),该进程启动的时间为今天的9:29,且获取的终端环境为pts/0 ,与ps aux看到的其实是同一个进程。这样可以理解吗?让我们继续使用ps来查看一下其他信息。

范例三:以范例一的显示内容,显示出所有的进程。

…… 

#你会发现每个栏位与ps -l的输出情沉相同,但显示的进程则包括系统所有的进程。

范例四:列出类似进程树的进程显示。



着出来了吧?你会发现其实进程之间是有相关性的。不过,其实还可以使用pstree来完全查看这个进程树。

从上面的例子来看,鸟哥是通过sshd提供的网络服务获取一个进程,该进程提供bash给我使用,而我通过bash再去执行ps axf这样可以看得懂了吗?其他各字段的意义请man ps(虽然真的很难man出来)

落例五:找出与cron与rsyslog这两个服务有关的PID号码。

就是这样找的。

除此之外,我们必须要知道的是【僵尸(zombie)】进程是什么?

通常,造成僵尸进程的原因在于该进程应该已经执行完毕,或是应该要终止了,但是该进程的父进程却无法完整地将该进程结束掉,而造成该进程一直存在内存当中。如果你发现在某个进程的CMD后面接上了<defunct>时,就代表该进程是僵尸进程,例如:

        系统不稳定的时候就容易造成所谓的僵尸进程,可能是因为程序写得不好,或是用户的操作习惯不良等所造成的。

        如果你发现系统中有很多僵尸进程时,记得,要找出该进程的父进程,然后好好做个追踪,好好进行主机的环境优化,看看有什么地方需要改善,不要只是直接将它kill掉。不然的话,万一它一直产生,那可就麻烦了。

        事实上,通常僵尸进程都已经无法管理,而直接交给systemd 这个进程来负责,偏偏 systemd是系统第一个执行的进程,它是所有进程的父进程。我们是无法杀掉该进程的(杀掉它,系统就死掉了),所以,如果产生僵尸进程,而系统过一阵子还没有办法通过内核非经常性的特殊处理来将该进程删除时,那你只好通过reboot的方式来将该进程kill掉。

2.2.top:动态查看进程的变化

相对于ps是选取一个时间点的进程状态,top则可以持续检测进程运行的状态。

使用方式如下:

  • [root@study~]#top  [-d数字] | top [-bnp]

选项与参数:

  • -d:后面可以接秒数,就是整个进程界面更新的秒数。默认是5秒。
  • -b:以批量的方式执行top,还有更多的参数可以使用,通常会搭配数据流重定向来将批量的结果输出为文件。
  • -n:与-b搭配,意义是,需要执行几次top的输出结果、
  • -p:指定某些个PID来执行查看监测而已。

在top执行过程当中可以使用的按键命令:

  1. ?:显示在top当中可以输入的按键命令。
  2. P:以CPU的使用排序显示。
  3. M:以Memory的使用排序显示。
  4. N:以 PID来排序。
  5. T:由该进程使用的CPU时间累积(TIME+)排序。
  6. k:给予某个PID一个信号(signal)。
  7. r:给予某个PID重新制订一个nice值。
  8. g:退出top的按键。

其实top的功能非常多,可以用的按键也非常多,可以参考man top的部分说明文件,=这里
仅列出了一些自己常用的选项而已。

接下来让我们实际查看一下如何使用top与top的界面。

范例一:每两秒更新一次top,查看整体消息

top 也是个挺不错的进程查看工具,但与ps的静态结果输出不同,top这个进程可以持续地监测整个系统的进程任务状态。

在默认的情况下,每次更新进程资源的时间为5秒,不过,可以使用-d来执行修改。

top主要分为两部分界面,上面的界面为整个系统的资源使用状态,基本上总共有六行,显示的内容依序是:

第一行(top...):这一行显示的信息分别为:

  1. 目前的时间,即11:50:57这个项目;
  2. 开机到目前为止所经过的时间,即up 11days,这个项目;
  3. 已经登录系统的用户人数,即1users,这个项目;
  4. 系统在1、5、15分钟的平均任务负载。batch任务方式为负载小于0.8就是这个负载。代表的是1、5、15分钟,系统平均要负责运行几个进程(任务的意思。数值越小代表系统越闲置,若高于1就要注意你的系统进程是否太过频繁了。

第二行(Tasks..):显示的是目前进程的总量与个别进程在什么状态(running、sleeping.stopped、zombie)。需要注意的是最后的zombie 那个数值,如果不是0,赶紧好好看看到底是哪个process变成僵尸了吧?

第三行(%Cpus……):显示的是CPU的整体负载,每个项目可使用?(问号)查看。

        需要特别注意的是wa项目,那个项目代表的是I/O wait,通常你的系统会变慢都是I/O产生的问题比较大。因此这里要注意这个项目耗用CPU的资源。另外,如果是多内核的设备,可以按下数字键【1】来切换成不同CPU的负载率。

第四行与第五行:表示目前的物理内存与虚拟内存(Mem/Swap)的使用情况。

        要注意的是swap的使用量要尽量的少,如果swap被用得很多,表示系统的物理内存实在不足。

第六行:这个是当在top进程当中输入命令时,显示状态的地方。

至于 top下半部分的画面,则是每个进程使用的资源情况,需要注意的是:

  • PID:每个进程的ID;
  • USER:该进程所属的用户;
  • PR:Priority的简写,进程的优先执行顺序,越小则越早被执行;
  • NI:Nice的简写,与Priority有关,也是越小则越早被执行;
  • %CPU:CPU的使用率;
  • %MEM:内存的使用率;
  • TIME+:CPU 使用时间的累加;

top 默认使用CPU使用率(%CPU)作为排序的依据。

如果你想要使用内存使用率排序,则可以按下【M】,若要恢复则按下【P】即可。

如果想要退出top,则按下【q】。

如果想要将top的结果输出成为文件时,可以这样做:

范例二:将top的信息执行2次,然后将结果输出到/tmp/top.txt。

 这样一来,嘿嘿,就可以将 top的信息存到/tmp/top.txt文件中了,

     这个命令很有趣,可以帮助你将某个时段top查看到的结果存成文件,可以在系统后台执行。由于是后台执行,与终端的屏幕大小无关,因此可以得到全部的进程界面。

        如果你想要查看的进程CPU与内存使用率都很低,结果老是无法在第一行显示时,该怎么办?我们可以仅查看单一进程。

如下所示:

范例三:我们自己的bash PID可由$$变量获取,请使用top持续查看该PID.

就是这个数字,它是我们bash的PID,



看到没?只会有一个进程给你看,很容易查看吧!好,那么如果我想要在top下面执行一些操作?
比方说,修改NI这个数值,可以这样做:

范例四:承上题,上面的NI值是0,想要改成10的话?

在范例三的 top界面当中直接按下r之后,会出现如下的界面,



完成上面的操作后,在状态栏会出现如下信息:

我们输入nice值即可


接下来你就会看到如下显示的画面。

看到不同了吧?下面的地方就是修改之后所产生的效果。

一般来说,如果想要找出最消耗CPU资源的那个进程时,大多使用的就是top这个程序,然后强制以CPU 使用资源来排序(在top当中按下P即可),就可以很快知道。一定要多多使用这个好用的东西。

2.3.pstree

pstree它以树状图的形式显示运行中的进程。这种树状图的格式比ps命令更直观,使输出更具视觉吸引力。

  •  pstree [-A/U] [-up]

选项与参数:

  • -A:各进程树之间的连接以ASCII字符来连接
  • -U:各进程树之间的连接以 Unicode的字符来连接,在某些终端界面下可能会有错误.
  • -P:并同时列出每个进程的PID.
  • -u:并同时列出每个进程的所属账号名称。

范例一:列出目前系统上面所有的进程树的相关性。



范例二:承上题,同时显示PID与users。



.…(下面省略)···

.…(下面省略)··· 

#在括号()内的即是PID以及该进程的owner,一般来说,如果该进程的拥有者与父进程相同,就不会列出,但是如果与父进程不一样,那就会列出该进程的拥有者,看上面100772就转变成了zs_108,

        如果要找进程之间的相关性,这个pstree 真是好用到不行。

  • 直接输入pstree就可以查到进程相关性,如上表所示,还会使用线段将相关性进程连接起来。
  • 一般连接符号使用ASCII码即可,有时因为语系问题会主动以Unicode的符号来连接。
  • 但如果终端无法支持该编码,可能会造成乱码问题,可以加上-A选项来解决此类线段乱码问题。

        由pstree的输出我们也可以很清楚地知道,所有的进程都是依附在systemd这个进程下面的。仔细看一下,这个进程的PID是一号,因为它是由Linux内核所主动调用的第一个进程,所以PID就是一号了。

        这也是我们刚刚讨论僵尸进程时提到的,为啥出现僵尸进程时需要重新启动?因为systemd要重新启动,而重新启动systemd就是reboot。

        如果还想知道PID与所属用户,加上-u及-p两个参数即可。我们前面不是一直提到,如果子进程挂掉或是总砍不掉子进程时,该如何找到父进程吗?

呵呵!用这个pstree就对了。

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

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

相关文章

LLM大模型应用中的安全对齐的简单理解

LLM大模型应用中的安全对齐的简单理解 随着人工智能技术的不断发展&#xff0c;大规模语言模型&#xff08;如GPT-4&#xff09;的应用越来越广泛。为了保证这些大模型在实际应用中的性能和安全性&#xff0c;安全对齐&#xff08;Safe Alignment&#xff09;成为一个重要的概…

PostgreSQL 中如何实现数据的增量更新和全量更新的平衡?

文章目录 一、增量更新与全量更新的概念增量更新全量更新 二、考虑的因素1. 数据量2. 数据更改的频率和规模3. 数据一致性要求4. 系统性能和资源利用5. 业务逻辑和流程 三、解决方案&#xff08;一&#xff09;混合使用增量更新和全量更新&#xff08;二&#xff09;使用临时表…

基于 Springboot 红酒庄内部信息管理系统 设计实现

目录 &#x1f4da; 前言 &#x1f4d1;摘要 &#x1f4d1;系统流程 &#x1f4da; 系统架构设计 &#x1f4da; 数据库设计 6.1数据三范式&#xff1a; &#x1f4da; 系统功能的具体实现 &#x1f4ac; 系统登录和首页 系统登录 首页 &#x1f4ac; 用户功能模块 添…

Backend - C# 操作PostgreSQL DB

目录 一、安装 Npgsql 插件 &#xff08;一&#xff09;作用 &#xff08;二&#xff09;操作 &#xff08;三&#xff09;注意 二、操作类 &#xff08;一&#xff09;操作类 1.NpgsqlConnection类 &#xff08;1&#xff09;作用 &#xff08;2&#xff09;引入 &a…

3Ds MAX 2025:创意的翅膀

初识3Ds MAX 2025 在我初次接触3Ds MAX 2025时&#xff0c;仿佛打开了一扇通往无限可能的大门。那时&#xff0c;我还是一个对三维建模充满好奇的初学者&#xff0c;心中怀揣着对未来的憧憬和对艺术的热爱。3Ds MAX 2025的出现&#xff0c;如同一位温柔的导师&#xff0c;带领…

全面解析BPMN、CMMN、DMN与XML

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 全面解析BPMN、CMMN、DMN与XML 前言BPMN&#xff08;业务流程模型与标记法&#xff09;定义与用途…

【昇思25天学习打卡营打卡指南-第二十二天】GAN图像生成

GAN图像生成 模型简介 生成式对抗网络(Generative Adversarial Networks&#xff0c;GAN)是一种生成式机器学习模型&#xff0c;是近年来复杂分布上无监督学习最具前景的方法之一。 最初&#xff0c;GAN由Ian J. Goodfellow于2014年发明&#xff0c;并在论文Generative Adve…

国产口碑最好的骨传导耳机有哪些?优选五大高口碑机型推荐!

作为一名有着多年工作经验的数码测评师&#xff0c;可以说对骨传导耳机或者蓝牙耳机等数码产品有着深入的了解&#xff0c;近期&#xff0c;有很多粉丝&#xff0c;或者身边的朋友经常向我咨询关于骨传导耳机的问题。确实如此&#xff0c;优质的骨传导耳机能在保护听力、保持环…

AI知识库:以AI之力,引领企业知识管理新纪元

在当今这个信息爆炸的时代&#xff0c;企业面临着前所未有的知识管理挑战。随着数据量的激增&#xff0c;如何高效地整理、存储并快速检索海量信息&#xff0c;成为了每个企业亟需解决的核心问题。 在过去&#xff0c;企业的知识库常常被视为一种必要的负担。它们充满了冗长复…

侯捷C++面向对象高级编程(下)-2-non-explicit one argument constructor

1.构造函数 构造函数: Fraction(int num, int den 1) 初始化分子和分母&#xff0c;允许指定分子 num 和可选的分母 den。默认情况下&#xff0c;分母为 1。 加法运算符重载: Fraction operator(const Fraction& f) 重载了加法运算符 。这使得两个 Fraction 对象可以通过 …

【蓄势·致远】 同为科技(TOWE)2024年年中会议

2024年7月2日-8日&#xff0c;同为科技&#xff08;TOWE&#xff09;召开2024年年中工作会议。会议回顾上半年总体工作情况&#xff0c;分析研判发展形势&#xff0c;规划部署下半年工作。 为期一周的工作会议&#xff0c;由同为科技&#xff08;TOWE&#xff09;创始人、董事长…

vue 画二维码及长按保存

需求 想要做如下图的二维码带文字&#xff0c;且能够长按保存 前期准备 一个canvas安装qrcode&#xff08;命令&#xff1a;npm i qrcode&#xff09; 画二维码及文字 初始化画布 <template><div><canvas ref"canvas" width"300" he…

C# + halcon 联合编程示例

C# halcon 联合编程示例 实现功能 1.加载图像 2.画直线&#xff0c;画圆&#xff0c;画矩形, 画椭圆 ROI&#xff0c;可以调整大小和位置 3.实现找边&#xff0c;找圆功能 效果 开发环境 Visual Studio 2022 .NET Framework 4.8 halcondotnet.dll 查看帮助文档 项目结构 DL…

大模型“聚会”:国内卷价格,国外卷能力

[ GPT-4o和谷歌Gemini不断宣传现阶段AI能力大幅度提高&#xff0c;那么这两家&#xff0c;谁的大模型能力更强呢&#xff1f;这篇文章里&#xff0c;作者就展开了多维度的测试和体验&#xff0c;想了解的同学&#xff0c;可以来看一下。 在中美AI大模型的竞争上&#xff0c;正衍…

CDF累积分布函数和PPF百分点位分布函数

目录 cdf累积分布函数 (CDF) ppf百分位点函数 (PPF) 区别与联系示例关系和区别 cdf 累积分布函数 (CDF) 定义&#xff1a; 累积分布函数 F ( x ) F(x) F(x) 给出随机变量 X X X 小于或等于某个值 x x x 的概率。数学定义&#xff1a; F ( x ) P ( X ≤ x ) F(x) P(X \l…

[C++]——同步异步日志系统(3)

同步异步日志系统 一、日志系统框架设计1.1模块划分1.1.1 日志等级模块1.1.2 日志消息模块1.1.3 日志消息格式化模块1.1.4 日志落地模块&#xff08;日志落地的方向是工厂模式&#xff09;1.1.5 日志器模块&#xff08;日志器的生成是建造者模式&#xff09;1.1.6 异步线程模块…

Coze API接口实战应用

Coze API介绍 概述 Coze API作为Coze平台对外的桥梁&#xff0c;让开发者能够灵活地利用Coze的功能和服务&#xff0c;促进业务流程自动化和系统集成。它覆盖了从数据获取到智能交互的全方位功能&#xff0c;旨在提升工作效率和创造更多可能。 Coze API申请接入流程 1. 发现…

python--实验8 函数(2)

知识点 变量的作用域 定义&#xff1a;解释了局部变量和全局变量的概念。局部变量&#xff1a; 局部变量是在函数内部定义的变量。它们只在该函数内部可见&#xff0c;一旦函数执行完毕&#xff0c;这些变量就会被销毁。例子&#xff1a;在函数内部通过赋值创建的变量。全局…

【卡尔曼滤波】高斯白噪声

生成高斯白噪声并将其应用于信号处理 生成高斯白噪声并将其应用于信号处理 #以下是一个生成高斯白噪声并将其应用于信号处理的示例代码:import numpy as np import matplotlib.pyplot as plt import matplotlib.font_manager ## not work#notice matplotlibrc is a file, not…

hf-mirror (huggingface 的国内镜像)

官网&#xff1a; https://hf-mirror.com/ 网站域名 hf-mirror.com&#xff0c;用于镜像 huggingface.co 域名。作为一个公益项目&#xff0c;致力于帮助国内AI开发者快速、稳定的下载模型、数据集。 如何使用HF-Mirror 方法一&#xff1a;网页下载 在https://hf-mirror.com/…