如何使用ps命令监视Linux进程

时间:2020-01-09 10:39:55  来源:igfitidea点击:

使用ps命令获取Linux计算机中正在运行的进程的快照。通过名称,用户甚至终端来定位进程,并根据需要提供尽可能多的细节。我们向我们展示如何。

Linux上的今年初管理

所有Linux和类Unix操作系统的心脏都是内核。它的许多职责之一是分配系统资源,例如RAM和CPU时间。这些必须实时处理,以便根据每个任务的优先级公平地共享所有正在运行的进程。

有时,任务可能会锁定,进入紧密循环或者由于其他原因而变得无响应。否则它们可能会继续运行,但会占用过多的CPU时间或者RAM,或者表现为某种反社会的行为。有时需要杀死任务,以怜悯所有参与其中的人。第一步。当然是确定有问题的过程。

但是也许我们根本没有任何任务或者性能问题。也许我们只是对计算机内部正在运行的进程感到好奇,并且想了解一下这些信息。 ps命令满足了这两个需求。它为我们提供了计算机内部当前状况的快照。

ps具有足够的灵活性,可以按照我们想要的格式准确地为我们提供所需的信息。实际上,ps具有很多选择。这里描述的选项将满足大多数普通的需求。如果我们需要比本文更深入地了解" ps",我们会发现我们的介绍使手册页更易于理解。

查看进程

使用ps的最简单方法是不使用任何参数启动它:

ps

ps显示由运行命令的用户启动的进程的列表。

这四列是:

  • PID:进程的进程ID号。

  • TTY:用户登录所在的控制台的名称。

  • TIME:进程已使用的CPU处理时间。

  • CMD:启动该过程的命令的名称

列出所有用户的进程

通过添加-e(选择所有进程),我们可以使ps列出所有用户启动的进程,而不仅仅是运行ps命令的用户。因为这将是一长串,所以我们将其放入less中。

ps -e | less

进程列表被传送到less中。

列表中还有更多条目,但是我们看到与以前相同的四列。 TTY列中带有问号"?"的条目不是从终端窗口开始的。

显示进程层次结构

有时,如果我们可以查看哪个进程启动了其他进程,则有助于找出问题或者确定特定进程。我们使用-H(层次结构)选项。

ps -eH | less

缩进指示哪些进程是哪些其他进程的父进程。

为了更加清晰,我们可以要求" ps"添加一些ASCII行并将层次结构绘制为树。执行此操作的选项是--forest选项。

ps -eH --forest | less

这使得更容易跟踪哪些进程是其他进程的父进程。

按名称列出进程

我们可以通过" grep"将" ps"的输出通过管道传递到名称与搜索词匹配的条目。在这里,我们正在寻找与firefox搜索词匹配的条目:

ps -e | grep firefox

在这种情况下,输出只是我们感兴趣的过程的单个条目。当然,如果我们启动了多个Firefox实例,则列表中将返回多个项。

在输出中显示更多列

要在输出中添加更多列,请使用-f(全格式)选项。

ps -ef | less

ps的输出中包含一组额外的列。

这些列是:

  • UID:此进程的所有者的用户ID。

  • PID:进程的进程ID。

  • PPID:进程的父进程ID。

  • C:该进程具有的子代数。

  • STIME:开始时间。该过程开始的时间。

  • TTY:用户登录所在的控制台的名称。

  • TIME:进程已使用的CPU处理时间。

  • CMD:启动进程的命令的名称。

通过使用-F(额外的全格式)选项,我们可以获得更多的列:

ps -eF | less

我们这次获得的列要求将屏幕横向滚动以显示所有内容。

按向右箭头键可将显示向左移动。

我们现在得到的列是:

  • UID:此进程的所有者的用户ID。

  • PID:进程的进程ID。

  • PPID:进程的父进程ID。

  • C:该进程具有的子代数。

  • SZ:过程镜像的RAM页中的大小。

  • RSS:居民集大小。这是该进程使用的未交换的物理内存。

  • PSR:将进程分配给的处理器。

  • STIME:开始时间。该过程开始的时间。

  • TTY:用户登录所在的控制台的名称。

  • TIME:进程已使用的CPU处理时间。

  • CMD:启动进程的命令的名称。

按进程ID列出进程

找到感兴趣的进程的进程ID后,可以将其与ps命令一起使用以列出该进程的详细信息。使用-p(按进程ID选择)选项可实现此目的:

ps -p 3403

列出了此过程的详细信息:

我们不限于一个进程ID。我们可以提供一个进程ID列表,以空格分隔。

按命令列出进程

-C(命令)选项使我们可以使用命令名称搜索进程。也就是说,启动进程的命令的名称。这与命令行稍有不同,命令行可能包含路径名,参数或者选项。

ps -C shutter

列出了快门处理的详细信息。

列出用户拥有的进程

要查看特定用户拥有的进程,请使用-u(用户列表)选项:

ps -u mary

显示用户帐户mary拥有的进程。

终端列出进程

要查看与TTY相关的进程,请使用-t(按TTY选择)选项。不带TTY编号使用时,-t选项报告与当前终端窗口关联的进程。

tty
ps -t

tty命令报告这是伪整数0。ps -t列出的进程都与TTY pts / 0相关。

如果我们在命令行上传递了一个TTY编号,则应该获得与该TTY相关的进程的报告。

ps -t 1

这次,进程都与TTYpts / 1相关联。

选择要显示的列

使用-o(格式)选项,我们可以选择要包含在ps输出中的列。我们可以按名称指定列。列名的(长)列表可以在手册页的标准格式说明符部分中看到。 `)包含在输出中。

ps -e -o pcpu,args | less

输出仅包含我们要求的两个列。

按列对输出排序

我们可以使用--sort选项对输出进行排序。让我们按CPU列对输出进行排序:

ps -e -o pcpu,args --sort -pcpu| less

pcpu`sort参数上的连字符-给出降序排列。

要查看十个最占用CPU的进程,请通过head命令传递输出:

ps -e -o pcpu,args --sort -pcpu | head -10

我们得到一个排序的,被截断的列表。

如果我们在显示中添加更多列,则可以按更多列进行排序。让我们添加pmem列。这是进程正在使用的计算机内存的百分比。如果没有连字符或者带有加号" +",则排序顺序是递增的。

ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10

我们得到了额外的列,并且新列包含在排序中。第一列在第二列之前排序,第二列以升序排序,因为我们没有在'pmem'上加上连字符。

让我们使它更有用,并添加进程ID列(pid),以便在列表中看到每个进程的进程号。

ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

现在我们可以确定流程了。

通过进程ID终止进程

我们介绍了多种方法来识别进程,包括名称,命令,用户和终端。我们还介绍了通过进程的动态属性(例如CPU使用率和内存)识别进程的方法。

因此,我们可以通过一种方式来识别正在运行的进程。通过了解它们的进程ID,我们可以(如果需要)使用kill命令杀死所有这些进程。如果我们想终止进程898,则可以使用以下格式:

sudo kill 898

如果一切顺利,该过程将以静默方式终止。

按名称杀死进程

pkill命令允许我们按名称杀死进程。确保我们确定了正确的过程!此命令将终止顶层进程。

sudo pkill top

同样,没有消息是好消息。该过程无提示地终止。

按名称杀死多个进程

如果我们正在运行一个进程的多个副本,或者一个进程产生了多个子进程(例如Google Chrome浏览器可以做到),那么如何杀死它们?就这么简单。我们使用killall命令。

我们有两本热门广告:

ps -e | grep top

我们可以使用以下命令终止它们:

sudo killall top

没有响应就意味着没有问题,因此这两个过程都已终止。

使用top获取进程动态信息

ps的输出是快照视图。它不会更新。要获取进程的更新视图,请使用" top"命令。它提供了计算机中正在运行的进程的动态视图。显示分为两部分。屏幕顶部有一个仪表板区域,由文本行组成,屏幕下部有一个表,由列组成。

使用以下命令启动" top":

top

这些列包含有关进程的信息:

  • PID:进程ID

  • USER:流程所有者的名称

  • PR:流程优先

  • NI:这个过程的价值

  • VIRT:进程使用的虚拟内存

  • RES:进程使用的常驻内存

  • SHR:进程使用的共享内存

  • S:进程状态。请参阅以下该字段可以采用的值的列表

  • %CPU:自上次更新以来该进程使用的CPU时间的份额

  • %MEM:使用的物理内存份额

  • TIME +:任务使用的总CPU时间,以百分之一秒为单位

  • COMMAND:命令名称或者命令行(名称和命令行参数)如果看不到命令列,请按向右箭头键。

进程的状态可以是以下之一:

  • D:不间断的睡眠

  • R:跑步

  • S:睡觉

  • T:已追踪(已停止)

  • Z:僵尸

按Q键从"top"退出。