Chinaunix首页 | 论坛 | 博客
  • 博客访问: 70289
  • 博文数量: 13
  • 博客积分: 197
  • 博客等级: 入伍新兵
  • 技术积分: 140
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-22 17:54
文章分类

全部博文(13)

文章存档

2011年(13)

分类: LINUX

2011-02-06 16:55:06

linux中的proc文件系统是一个虚拟的文件系统,利用这个文件系统,可以实现内核空间和用户空间的通讯。用户可以通过访问/proc文件夹来获取系统信息,并可以通过读写/proc文件夹内文件的内容,来改变内核的某些参数。系统信息如进程等是动态改变的,因此用户或应用程序读取proc文件夹内的文件时,proc文件系统是动态的从系统内核内读出所需信息再提交给用户或者应用程序的。
系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。而self目录则是读取进程本身的信息接口,是一个link。Proc文件系统的名字就是由之而起。进程目录的结构如下:

目录名称

目录内容

Cmdline

命令行参数

Environ

环境变量值

Fd

一个包含所有文件描述符的目录

Mem

进程的内存被利用情况

Stat

进程状态

Status

进程当前状态,以可读的方式显示出来

Cwd

当前工作目录的链接

Exe

指向该进程的执行命令文件

Maps

内存映象

Statm

进程内存状态信息

Root

链接此进程的root目录


通过读取该目录下不同文件的信息,可以获得进程运行的各项参数。

利用proc目录操作获取某个进程运行时占用的内存的例子:
  1. int get_memory_used(pid_t pid){
  2.     FILE *pfp;
  3.     char tmpstr[32];
  4.     sprintf(tmpstr,"/proc/%d/statm",pid);
  5.     pfp=fopen(tmpstr,"r");
  6.     if(pfp==NULL)
  7.     {
  8.         
  9.             perror("get momey info error\n");
  10.         return -1;
  11.     }
  12.     int mem_used;
  13.     fscanf(pfp,"%d",&mem_used);
  14.     return mem_used;
  15. }


阅读(1979) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~