如何使用ps命令监视Linux进程
使用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"退出。