写在最前面:在开始本文之前,笔者认为先有必要介绍一下linux下的man,如果读者手头用linux系统,直接在终端输入man man便可以看到详细的说明,我在这里简单的总结一下,man命令是用来查看linux下各种命令、工具等的用户手册(manual)的。一种比较常用的用法是”man n field”,这里的n是要查找的手册了类型,field是关键字。在这里介绍一下n:

  • 0 /usr/include下的头文件
  • 1 可执行程序和shell命令
  • 2 系统调用
  • 3 系统库函数
  • 4 /dev下的特殊文件
  • 5 文件格式和约定(比如/etc/passwd)
  • 6 游戏
  • 7 其它
  • 8 仅root可用的系统管理命令
  • 9 内核相关的内容

通常情况下,如果不加n的话,系统会按一定的顺序,有时候得到的可能不是你想要的,这时候就需要加上n了,这就是我要介绍n的目的。比如,你man printf,系统返回的肯定是shell命令printf,你要看库函数printf怎么办呢,那就man 3 printf,that’s ok 
      下面进入今天的正题,/proc是linux系统为我们用户提供的一个可以用来访问系统相关数据及信息的一个伪文件 系统,通过它我们不仅可以获取指定某个进程的相关信息,还可以获取系统整体的运行情况及信息。因为本文讲的是分析程序的工具,所以本文将侧重介绍通过/proc来分析程序本身,关于如何通过/proc来查看系统相关信息,可以通过man 5 proc来看(这也是我开始就讲man的一个原因  )。

  • /proc/[number]/cmdline 程序命令行参数,以’\0′分隔的字符串文件(在程序中,可以通过直接读此文件,获取程序的命令行参数,但不推荐这么做,这样做了程序的可移植性不好  )
  • /proc/[number]/cwd 程序的当前工作路径的软链接(readlink就可以得到被链接的目录)
  • /proc/[number]/environ 程序的当前环境变量,以’\0′分隔的字符串文件
  • /proc/[number]/exe 程序的可执行文件的软链接(通过readlink可以获取程序可执行文件的完整路径)
  • /proc/[number]/fd 程序当前正在使用的fd,这些fd都链向实际的文件
  • /proc/[number]/maps 程序的地址空间分布和访问权限(通过这些信息,可以查看进程的地址是否在合法的范围)
1
2
3
4
5
6
7
8
9
10
address           perms offset  dev   inode      pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
08056000-08058000 rw-p 0000d000 03:0c 64593 /usr/sbin/gpm
08058000-0805b000 rwxp 00000000 00:00 0
40000000-40013000 r-xp 00000000 03:0c 4165 /lib/ld-2.2.4.so
40013000-40015000 rw-p 00012000 03:0c 4165 /lib/ld-2.2.4.so
4001f000-40135000 r-xp 00000000 03:0c 45494 /lib/libc-2.2.4.so
40135000-4013e000 rw-p 00115000 03:0c 45494 /lib/libc-2.2.4.so
4013e000-40142000 rw-p 00000000 00:00 0
bffff000-c0000000 rwxp 00000000 00:00 0
  • /proc/[number]/smaps (since Linux 2.6.14) 程序的每块内存映射区域的内存使用情况
1
2
3
4
5
6
7
08048000-080bc000 r-xp 00000000 03:02 13130 /bin/bash    #与maps中的相同
Size: 464 kB #映射区的大小
Rss: 424 kB #实际在内存中的大小
Shared_Clean: 424 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
  • /proc/[number]/stat 程序的状态信息,ps命令得到的程序信息就是从此处获取的,因此详细的因容可以ps命令
  • /proc/[number]/statm 程序的内存页(page)状态
1
2
3
4
5
6
7
size       total program size
resident resident set size
share shared pages
text text (code)
lib library
data data/stack
dt dirty pages (unused in Linux 2.6)
  • /proc/[number]/status stat和statm合起来的信息,以一种比较方便用户读的方式展示

linux程序分析工具介绍(一)—-”/proc”的更多相关文章

  1. Linux程序分析工具介绍—ldd,nm

    原文链接:http://blog.csdn.net/statdm/article/details/7759100 本文要介绍的ldd和nm是linux下,两个用来分析程序很实用的工具.ldd是用来分析 ...

  2. linux程序分析工具介绍(二)—-ldd,nm

    本文要介绍的ldd和nm是linux下,两个用来分析程序很实用的工具.ldd是用来分析程序运行时需要依赖的动态库的工具:nm是用来查看指定程序中的符号表相关内容的工具.下面通过例子,分别来介绍一下这两 ...

  3. linux程序分析工具介绍(三)——sar

    本文要介绍的sar,是linux下用来分析系统本身运行情况的非常有用的工具.我们知道,程序在操作系统上要运行,要关注的点不外乎内存,CPU和IO(包括磁盘IO和网络IO).我们的应用程序在操作系统中运 ...

  4. Linux程序分析工具:ldd和nm

    ldd和nm是Linux下两个非常实用的程序分析工具.其中,ldd是用来分析程序运行时需要依赖的动态链接库的工具,nm是用来查看指定程序中的符号表信息的工具. 1 ldd 格式:ldd [option ...

  5. linux程序分析工具

    ldd和nm是Linux下两个非常实用的程序分析工具.ldd是用来分析程序运行时需要依赖的动态链接库的工具,nm是用来查看指定程序中的符号表信息的工具,objdump用来查看源代码与汇编代码,-d只查 ...

  6. (转)超全整理!Linux性能分析工具汇总合集

    超全整理!Linux性能分析工具汇总合集 原文:http://rdc.hundsun.com/portal/article/731.html 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望, ...

  7. Linux资源分析工具杂谈(长文慎入)

    Linux资源分析工具杂谈 开篇之前请大家先思考一个问题:        磁盘的平均I/O响应时间是1 ms,这个指标是好,还是差? 众所周知,计算机科学是客观的,也就是说对于一个给定的问题,我们总是 ...

  8. Linux 日志分析工具(logwatch)安装及使用

    Linux 日志分析工具(logwatch)安装及使用 日志是非常重要的系统文件,管理员每天的重要工作就是分析和查看服务器的日志,判断服务器的健康状态.但是日志管理又是一项非常枯燥的工作,如果需要管理 ...

  9. Linux 内存分析工具的命令大全介绍

    在Linux系统经常被用作服务器系统.当服务器内存吃紧的时候,free命令是我们最常使用的内存分析工具. free使用介绍# free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存, ...

随机推荐

  1. R-CNN

    标题:<Rich feature hierarchies for accurate object detection and semantic segmentation> 时间:2014 ...

  2. (原创)团体程序设计天梯赛-练习集 L1-048 矩阵A乘以B (15 分)

    给定两个矩阵A和B,要求你计算它们的乘积矩阵AB.需要注意的是,只有规模匹配的矩阵才可以相乘.即若A有R​a​​行.C​a​​列,B有R​b​​行.C​b​​列,则只有C​a​​与R​b​​相等时,两 ...

  3. 【bzoj2190】: [SDOI2008]仪仗队 数论-欧拉函数

    [bzoj2190]: [SDOI2008]仪仗队 在第i行当且仅当gcd(i,j)=1 可以被看到 欧拉函数求和 没了 /* http://www.cnblogs.com/karl07/ */ #i ...

  4. django 学习之DRF (二)

    Django学习之DRF02 Serializer序列化器之反序列化操作    1.调⽤序列化器进⾏验证        0.准备序列化器 class BookInfoSerializer(serial ...

  5. Node JS爬虫:爬取瀑布流网页高清图

    原文链接:Node JS爬虫:爬取瀑布流网页高清图 静态为主的网页往往用get方法就能获取页面所有内容.动态网页即异步请求数据的网页则需要用浏览器加载完成后再进行抓取.本文介绍了如何连续爬取瀑布流网页 ...

  6. 一些优秀的Firefox扩展

    AdBlock Plus 拦截广告. 在对付CSDN等垃圾网站时非常有用. Block Site 拦截你不想看的网站 没有知乎的一天真好... XStyle 设置自己喜欢的CSS样式(表示自己并不会用 ...

  7. 百度地图 js 调用

    百度地图key 的获取 进入 http://lbsyun.baidu.com/i 登录你的账号 点击进入控制台,复制 ak 的值 <!doctype html> <html> ...

  8. Django 的 model form 组件

    Django 的 model form 组件 Model Form 组件的由来 之前介绍过 Django 的 Form 组件(Django的Form表单)使用方法,Form 组件能够帮我们做三件事: ...

  9. ST表(查询区间最值问题)

    ST表与线段树相比,这是静态的,无法改动,但是他的查询速度比线段树要快,这是牺牲空间换时间的算法. O(nlogn)预处理,O(1)查询.空间O(nlogn). ][]; ]; void rmq_in ...

  10. Java使用Array类创建多维数组

    1.创建一维数组 import java.lang.reflect.Array; public class ArrayTest { public static void main(String[] a ...