本文于2017年3月19号发布在个人博客中,因为个人博客关闭,全部迁移到CSDN,以下是正文:


引言

提到linux ps命令,相信所有在linux开发的程序员都用过

有人是这样的:

ps -ef | grep httpd


也有人是这样的:

$ ps -aux | grep httpd


如果想要了解详细的信息,请移步:man ps,或者

$ man ps

内容有点多,我英语也不好,说下去会露馅了,进入我们今天的主题:在linux下如何监控进程(包括:状态,CPU使用率,已使用内存等)?

我做了以下的尝试:

  • 使用第三方库,python就有psutil
  • 通过proc下的stat文件
  • 基于linux ps命令

如果没有各种麻烦的审核流程,第一个可以说是最省事的,第二个是最麻烦的,需要自己解析各个字段并做相应的计算,最终选择了第三种

/proc/[pid]/stat

第二种我想多说几句,以上面的httpd进程为例,进程ID:1153,那么在”/proc”目录下必定有一个”1153″目录,如下:

$ ls /proc/1153

进程状态相关的信息全在”/proc/1153/stat”文件里了,详细的可以参考:man proc,直接翻到”/proc/[pid]/stat”章节:

/proc/[pid]/statStatus information about the process.  This is used by ps(1).It is defined in the kernel source file fs/proc/array.c.The fields, in order, with their proper scanf(3) formatspecifiers, are listed below.  Whether or not certain of thesefields display valid information is governed by a ptraceaccess mode PTRACE_MODE_READ_FSCREDS | PTRACE_MODE_NOAUDITcheck (refer to ptrace(2)).  If the check denies access, thenthe field value is displayed as 0.  The affected fields areindicated with the marking [PT].(1) pid  %dThe process ID.(2) comm  %sThe filename of the executable, in parentheses.This is visible whether or not the executable isswapped out.(3) state  %cOne of the following characters, indicating processstate:R  RunningS  Sleeping in an interruptible waitD  Waiting in uninterruptible disk sleepZ  ZombieT  Stopped (on a signal) or (before Linux 2.6.33)trace stoppedt  Tracing stop (Linux 2.6.33 onward)W  Paging (only before Linux 2.6.0)X  Dead (from Linux 2.6.0 onward)x  Dead (Linux 2.6.33 to 3.13 only)K  Wakekill (Linux 2.6.33 to 3.13 only)W  Waking (Linux 2.6.33 to 3.13 only)P  Parked (Linux 3.9 to 3.13 only)
......

linux ps

同样只适合在linux操作系统之上,ps命令就比”/proc/[pid]/stat”简单多了

进程状态

$ ps --pid $pid -o pid,stat

已使用内存(%)

$ ps --pid $pid -o pid,%mem

已使用内存(KB)

$ ps --pid $pid -o pid,rss

CPU利用率

$ ps --pid $pid -o pid,%cpu

根据名称找pid

$ ps -e -o pid,comm
$ ps -e -o pid,cmd


你可能已经发现上面的命令都是具体到某个pid的,但实际场景中我们可能只知道进程名称不知道进程ID,可以按照如下步骤查找进程名称对应的进程ID

  1. $ ps -e -o pid,comm。如果查出来有多个,进程名称都是python,但python启动的脚本不一样,那就得使用第二招了
  2. $ ps -e -o pid,cmd。现在就可以清晰的看出来启动了哪个脚本了吧,同样地适用于所有通过A程序启动B程序的情况


仅仅通过”ps -e -o pid,comm”是无法区分我是”python comm1.py”还是”python comm2.py”还是”python comm3.py”的,我们需要使用”$ ps -e -o pid,cmd”进行更精确的匹配

子进程

还有一种场景:进程启动了多个子进程,需要首先找到父进程,然后找出所有的子进程

  1. 查找父进程可以通过进程名称来判断,如果当前进程的父进程的名称跟输入的进程名称相同则继续查找祖父进程,直到某进程的父进程名称跟输入进程名称不同,则为所要找的父进程
  2. 查找某个进程的所有子进程可以通过–ppid过滤


掌握以上知识,相信你已经能够编写出监控进程的代码了

ps – report process status相关推荐

  1. linux ps(process status) 命令详解

    linux ps(process status) 命令详解 功能说明:报告程序状况. 语 法:ps [-aAcdefHjlmNVwy][acefghLnrsSTuvxX][-C <指令名称> ...

  2. jps命令 Java Virtual Machine Process Status Tool

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! JDK内 ...

  3. 查看进程状态信息命令 jps - (Java Virtual Machine Process Status Tool)

    jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上 ...

  4. 解决 : Apache Tomcat/8.0.0-RC1 - Error report ... HTTP Status 404

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1.报错: Apache Tomcat/8.0.0-RC1 - Error report HTTP ...

  5. 17.2. ps - report a snapshot of the current processes

    ps命令能够给出当前系统中进程的快照.它能捕获系统在某一时间的进程状态.如果你想不断更新查看的这个状态,可以使用top命令.### Display all processes1) 使用 -a 参数-a ...

  6. jps命令(Java Virtual Machine Process Status Tool)(转)

    1.介绍 用来查看基于HotSpot的JVM里面中,所有具有访问权限的Java进程的具体状态, 包括进程ID,进程启动的路径及启动参数等等,与unix上的ps类似,只不过jps是用来显示java进程, ...

  7. aix 查看目前java进程_问一个 AIX 的命令 ps -ef|grep java

    只是知道可以用这个命令查看进程,然后用 kill -9 来杀行程. 用  "ps -ef|grep java" 显示出很多东西,类型下面的 weblogic 11111111 22 ...

  8. Busybox命令详解

    转载地址:不详 NAME BusyBox - The Swiss Army Knife of Embedded Linux SYNTAX busybox <applet> [argumen ...

  9. linux 命令 ps的作用,Linux之ps命令

    1.功能简介 报告当前进程[root@vms002 /]# whatis ps ps (1)               - report a snapshot of the current proc ...

最新文章

  1. 正确使用Windows Azure 中的VM Role
  2. 位操作的应用:判断一个数是不是2的幂数,实现循环移位【位操作】(55)
  3. Nuget 多平台多目标快速自动打包
  4. 【Python数据挖掘课程】六.Numpy、Pandas和Matplotlib包基础知识
  5. cJSON_译(C中的超轻量级JSON解析器)
  6. 图的遍历(C语言,邻接表存储的图 - DFS,邻接矩阵存储的图 - BFS)
  7. MySQL无法启动 服务没有报告任何错误
  8. javascript JSON.parse和eval的区别
  9. 抢椅子游戏java_抢椅子游戏作文(精选10篇)
  10. 全网最全C盘清理攻略
  11. 「硬见小百科」很全的二极管干货
  12. 假若明天来临——《AI.未来》读后感3900字
  13. 易到网约车许可证到手,终于能卖个好价钱了
  14. 机智云IOT软件平台受邀参展STM32全国巡回研讨会/中国电信天翼智能生态博览会/签署“5G+天翼云+AI”战略合作
  15. AMiner必读论文推荐
  16. 中国古代十大杰出青年
  17. 读书笔记-人月神话6
  18. 一个Html页面给另一个html页面传值(或B.html页面调用A.html的参数)
  19. 【详细】win2008环境下oracle11G配置高可用dataguard
  20. 内生性问题的产生和解决办法

热门文章

  1. ipad4使用教程 ipad mini使用技巧
  2. 有趣大会 · ACL2022 (Findings篇)
  3. 嵌入式系统设计与开发期末考试复习
  4. 利用MAPI实现邮件收发(VC++)
  5. JAVA中phrase居左_mymail iText中用文本块(chunk)、短语(Phrase)和段 联合开发网 - pudn.com...
  6. 英语基础太差,能学好编程吗?
  7. 微软翻译离线简体中文服务器,微软翻译新增离线翻译功能,但使用体验并没有想象中的好...
  8. jQuery添加插入元素技巧
  9. Qt “Could not create directory“ 问题的一种解决方法
  10. 小程序获取本地存储数据,然后传参的时候是上次请求的id