草庐IT

Linux ps命令详解,Linux查看进程

士别三日wyx 2023-05-25 原文

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者

ps命令详解

作用:查看系统进程,比如正在运行的进程有哪些,什么时候开始运行的,哪个用户运行的,占用了多少资源。

参数:

  • -e     显示所有进程
  • -f     显示所有字段(UID,PPIP,C,STIME字段)
  • -a     显示一个终端的所有进程
  • -u     显示当前用户进程和内存使用情况
  • -x     显示没有控制终端的进程
  • –sort     按照列名排序

一、常用操作

ps命令常用的方式有三种:

  • ps -ef:查看所有进程
  • ps -aux:查看所有进程
  • ps -ef | grep tomcat:查看指定进程

1、查看所有进程(连带命令行)

ps -ef

字段解释:

  • UID:用户ID,即进程的拥有者
  • PID:进程ID
  • PPID:父进程ID
  • C:进程占用的CPU百分比
  • STIME:进程开始启动时间
  • TTY:登入者的终端机位置
  • TIME:进程使用的CPU(运算)时间
  • CMD:调用进程的命令

2、显示所有包含其他使用者的进程

ps -aux

字段解释:

  • USER:创建进程的用户
  • PID:进程ID
  • %CPU:进程占用CPU的百分比
  • %MEM:进程占用物理内存的百分比
  • VSZ:进程占用虚拟内存的大小(单位KB)
  • RSS:进程占用实际物理内存的大小(单位KB)
  • TTY:进程在哪个终端运行。
  • STAT:进程状态
  • START:进程开始启动的时间
  • TIME:进程使用的CPU(运算)时间
  • COMMAND:调用进程的命令

3、查看指定进程(grep过滤)

ps -ef 通常会配合 grep 来过滤指定的进程,比如

搜索 mysql 的进程:ps -ef | grep mysql

搜索 tomcat 的进程:ps -ef | grep tomcat



4、查看CPU/内存占用率最高的进程

1)查看进程的时候,让进程按照CPU使用率排序,然后展示前10行,就能清晰地看到哪些进程占用的资源比较多。

PS1:head -11 是因为标题也算一行
PS2:+-号可以调整排序,-pcpu 表示降序,+pcpu 表示升序

ps -aux --sort=-pcpu | head -11

2)同理,把 -pcpu 换成 -pmem,就能查看内存使用最多的10个进程。

ps -aux --sort=-pmem | head -11

3)如果不限制行数,也可以使用 sort 按照指定的列排序

降序:

ps -aux | sort -nk 4 -r

升序:

ps -aux | sort -nk 4

5、查看指定用户的进程

查看某个用户开启了哪些进程,可以使用 -u 参数指定用户名,比如,查看root用户的进程有哪些:

ps -u root -ef



6、分页查看进程

除了 grep 外,还可以配合 more 分页查看进程:ps -ef | more


翻页的操作同 more 命令,q键退出,空格键翻页


二、拓展

1、TTY字段(终端类型)

TTY字段表示运行进程的终端是哪个,这里的终端类型有两种:tty和pts。

  • tty:表示物理终端,其中tty1~6是本地字符界面终端,tty7是本地图形终端
  • pts:表示虚拟终端,通常指远程连接的终端,范围是pts/0~255,比如第一个远程连接的终端是pts/0,第二个远程连接的终端是pts/1,依次类推。

2、STAT字段(进程状态)

STAT字段表示进程的状态,常见的状态有以下几种:

  • D:睡眠状态(不可被唤醒),常用于I/O情况。
  • R:进程正在运行
  • S:睡眠状态(可被唤醒)
  • T:停止状态
  • W:内存交互状态
  • Z:僵尸进程(不存在但暂时无法消除)
  • <:高优先级
  • N:低优先级
  • L:被锁入内存
  • s:包含子进程
  • l:多线程
  • +:位于后台

3、僵尸进程

进程由于非正常停止或程序编写错误,导致子进程比父进程先结束,而父进程又没有正常回收子进程,使子进程一直在内存中,导致资源浪费。这种情况就是僵尸进程。

PS:正常情况下应该是父进程先结束,然后子进程由init接管,init 结束子进程并回收对应的资源。

有关Linux ps命令详解,Linux查看进程的更多相关文章

  1. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  2. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  3. ruby - 通过 ruby​​ 进程共享变量 - 2

    我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是

  4. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  5. ruby - 无法在 Ruby 中将 ffmpeg 作为子进程运行 - 2

    我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope

  6. Ruby 守护进程导致 ActiveRecord 记录器 IOError - 2

    我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame

  7. ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令 - 2

    我有一个问题。我想从另一个ruby​​脚本运行一个ruby​​脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密

  8. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  9. ruby - 在 ruby​​ 中生成一个进程,捕获 stdout,stderr,获取退出状态 - 2

    我想从ruby​​rake脚本运行一个可执行文件,比如foo.exe我希望将foo.exe的STDOUT和STDERR输出直接写入我正在运行rake任务的控制台.当进程完成时,我想将退出代码捕获到一个变量中。我如何实现这一目标?我一直在玩backticks、process.spawn、system但我无法获得我想要的所有行为,只有部分更新:我在Windows上,在标准命令提示符下,而不是cygwin 最佳答案 system获取您想要的STDOUT行为。它还返回true作为零退出代码,这可能很有用。$?填充了有关最后一次system调

  10. ruby - 在 Ruby 的 if 语句中检查 bash 命令 - 2

    如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最

随机推荐