已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
理解proc文件系统Windows系统 电脑资料 (这个是转贴,希望给大家提供帮助,更好地理解/proc文件系统) 不只一次的有人问我关于/proc文件系统,那是什么,那些巨大的文件在那里做什么?我可以删除它们吗?本文将详细介绍/proc文件系统,描述一些工具,你可以通过这些工具领略/proc的威力, (这个是转贴,希望给大家提供帮助,更好地理解/proc文件系统) 不只一次的有人问我关于/proc文件系统,那是什么,那些巨大的文件在那里做什么?我可以删除它们吗?本文将详细介绍/proc文件系统,描述一些工具,你可以通过这些工具领略/proc的威力。最后有一个例子程序,演示了系统管理员如何与/proc交互。 介绍/proc 在过去那些糟糕的日子里,只能通过直接访问内核内存(/dev/kmem)获取进程数据,比如运行ps(1)命令时。为了实现这种访问,需要超级用户权限,而且步骤相当复杂。Sun公司从UNIXSVR4开始解决了进程数据访问问题,现在,可以简单地通过/proc访问进程数据。 /proc文件系统不是普通意义上的文件系统,它是一个到运行中进程地址空间的访问接口。通过/proc,可以用标准Unix系统调用(比如open()、read()、write()、ioctl()等等)访问进程地址空间。事实上,Solaris ps(1)命令正是利用/proc获取进程状态。 S (l) 进程状态: O 正在运行 S 休眠: 进程正在等待某个事件发生/完成 R 可运行: 进程位于运行队列中 Z 僵尸状态: 进程结束了,但是其父进程未处理SIGCHLD信号 T 进程暂停: 可能是任务控制信号所致,或者正在被 跟踪调试 /proc下的大文件对应运行中进程的地址空间,不是标准Unix文件。事实上每个文件名对应运行中进程的PID,文件属主、属组对应进程拥有者的real-uid和primary-gid。权限控制与普通Unix文件一样。文件大小是最令人迷惑的地方,事实上相当好理解,对应进程内存映像大小,并不真正占用硬盘空间,所以你不必担心空间浪费的问题。不要企图删除这些文件!观察图A中列举的/proc例子: - $ ls -l /proc total 43384 -rw- 1 root root 0 Apr 2 20:07 00000 -rw- 1 root root 393216 Apr 2 20:07 00001 -rw- 1 root root 0 Apr 2 20:07 00002 -rw- 1 root root 0 Apr 2 20:07 00003 -rw- 1 root root 1695744 Apr 2 20:07 00081 -rw- 1 root root 1597440 Apr 2 20:07 00083 -rw- 1 root root 1777664 Apr 2 20:08 00096 -rw- 1 root root 1683456 Apr 2 20:08 00099 -rw- 1 root root 1589248 Apr 2 20:08 00101 -rw- 1 root root 1445888 Apr 2 20:08 00116 -rw- 1 root root 1404928 Apr 2 20:08 00126 -rw- 1 root root 798720 Apr 2 20:08 00135 -rw- 1 root root 1368064 Apr 2 20:08 00195 -rw- 1 root root 1585152 Apr 2 20:08 00197 -rw- 1 root root 1368064 Apr 2 20:08 00200 -rw- 1 root other 225280 Apr 2 20:08 00201 -rw- 1 root root 1454080 Apr 2 20:08 00203 -rw- 1 root root 1519616 Apr 2 20:14 00243 -rw- 1 rthomas wheel 1499136 Apr 2 20:14 00245 -rw- 1 rthomas wheel 806912 Apr 2 20:16 00261 $ 图A: /proc例子 - 操作/proc下文件的方式和操作普通Unix文件一样,可以使用所有你熟悉的系统调用,包括ioctl()。在内核中,针对/proc下文件的vnode操作被转向procfs。这意味着操作vnode的系统调用(比如lookuppn()实际上最终转向procfs-savvy系统调用(比如prlookup()。 /proc能告诉我什么 Solaris下使用/proc的工具相当完善,位于/usr/proc/bin目录中。这些工具提供了一种访问任意指定进程临界数据的简捷办法。比如,想知道一个进程已经打开了多少文件,你可以使用crash(1M)(见鬼,我不会),但是你是root吗?不必担心,可以用/usr/proc/bin/pfiles获取这种信息,图B演示了pfiles(1)命令的使用: - scz /export/home/scz ps PID TTY TIME CMD 637 pts/3 0:00 bash scz /export/home/scz pfiles 637 637: -bash Current rlimit: 64 file descriptors 0: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3 O_RDWR 1: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3 O_RDWR 2: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3 O_RDWR 3: S_IFDOOR mode:0444 dev:191,0 ino:1618164880 uid:0 gid:0 size:0 O_RDONLY|O_LARGEFILE FD_CLOEXEC door to nscd213 63: S_IFCHR mode:0620 dev:151,0 ino:196787 uid:500 gid:7 rdev:24,3 O_RDWR FD_CLOEXEC scz /export/home/scz 图B: 使用pfiles(1)命令 - 正如上面演示的,/usr/proc/bin下的命令使用很简单,只需要在命令行上指定PID。然而,留心权限许可设置,与所有普通Unix文件一样,你无权访问那些权限设置上禁止访问的指定PID的进程数据。 花点事件看看proc(1)手册页,熟悉其中介绍的命令,你将学会列举指定进程相关的库、进程信号设置、进程信任设置,你甚至可以暂停、重启进程, 编写/proc工具 /proc的魅力在于它包含了你可能想知道的关于一个进程的任何信息,你只需要简单地从中获取。/usr/include/sys/procfs.h文件中定义了两个结构,prstatus和prpsinfo,从中可以获取指定进程的很多信息。下面是个例子,开发者想知道他的应用程序究竟占用了多少内存。简单!ls /proc就可以知道了。但是,他还想知道更多细节,他需要知道总的映像大小、常驻部分的大小、堆区(heap)大小、栈区(stack)大小。此外,他希望能够定期跟踪这些数据信息,类似vmstat(1M)那种方式。如上所述,听起来象是一个令人生畏的任务。 译者: Solaris 2.6开始这两个结构定义在/usr/include/sys/old_procfs.h文件中 然而,通过使用/proc文件系统,我们可以使这项编程挑战变得容易些。我们写的这个工具称做memlook,将显示指定PID对应的内存统计信息。此外,可以在命令行上指定一个时间间隔,以便定期重新检测内存利用信息。图C演示了一次简单的输出: - $ memlook 245 PID IMAGE RSS HEAP STACK 245 1499136 1044480 24581 8192 $ 图C: memlook的输出举例 - 下面是memlook.c的源代码 - /* * (#)memlook.c 1.0 10 Nov 1997 * Robert Owen Thomas robtcymru. * memlook.c - A process memory utilization reporting tool. * * gclearcase/ target=_blank -Wall -O3 -o memlook memlook.c */ #pragma ident (#)memlook.c 1.0 10 Nov 1997 Robert Owen Thomas robtcymru. #include #include #include #include #include #include #include #include #include #include int counter = 10; int showUsage ( const char * ); void getInfo ( int, int ); int main ( int argc, char * argv ) int fd, pid, timeloop = 0; char pidpathBUFSIZ; /* /usr/include/stdio.h: #define BUFSIZ 1024 */ switch ( argc ) case 2: break; case 3: timeloop = atoi( argv2 ); break; default: showUsage( argv0 ); break; /* end of switch */ pid = atoi( argv1 ); sprintf( pidpath, /proc/%-d, pid ); /* -表示向左靠 */ if ( ( fd = open( pidpath, O_RDONLY ) ) 0 ) perror( pidpath ); exit( 1 ); if ( 0 timeloop ) for ( ; ; ) getInfo( fd, pid ); sleep( timeloop ); getInfo( fd, pid ); close( fd ); exit( 0 ); /* end of main */ int showUsage ( const char * progname ) fprintf( stderr, %s: usage: %s time delayn, progname, progname ); exit( 3 ); /* end of showUsage */ void getInfo ( int fd, int pid ) prpsinfo_t prp; prstatus_t prs; if ( ioctl( fd, PIOCPSINFO, &prp ) 0 ) perror( ioctl ); exit( 5 ); if ( ioctl( fd, PIOCSTATUS, &prs ) 9 ) fprintf( stdout, PIDtIMAGEttRSSttHEAPttSTACKn ); counter = 0; fprintf( stdout, %ut%-9ut%-9ut%-15ut%-15un, pid, ( unsigned int )prp.pr_bysize, ( unsigned int )prp.pr_byrssize, ( unsigned int )prs.pr_brksize, ( unsigned int )prs.pr_stksize ); counter+; /* end of getInfo */ - 译者: 作者这里利用了ioctl(),而不是直接读取/proc下文件,这样做的好处在于即使系统升级后/proc布局改变,内核中相应ioctl cmd支持也随之改变,对于应用层的开发者,接口一样,源代码可平稳移植。事实上从作者前面举例来看, memlook.c是在Solaris 2.6以前的版本上开发的,但我并未修改就可以直接用在Solaris 2.6上,虽然此时/proc布局已经发生重大变化。 仔细阅读prstatus和prpsinfo结构,寻找那些你敢兴趣的成员。在未能真正掌握这种技术之前不要针对/proc文件系统使用write()或者ioctl()。针对特定进程胡乱做write()调用,结果。 结论 当痛苦调试程序或者试图获取指定进程状态的时候,/pro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年10月11日 衡水市冀州区考核基地 道达尔 市场开发专员 16人
- 陕西榆林市府谷县2025-2026学年度第二学期期末质量抽样监测七年级地理试卷(含答案)
- 辽宁省营口市2025-2026学年七年级上学期1月期末质量监测生物试卷(含解析)
- 湖北省黄冈市2026-2027学年高三上学期开学9月供题数学试题(含简略答案)
- 广东省上进联考2027届高三上学期9月开学供题训练物理试卷(含答案)
- 2026年北京市小学三年级数学第8单元统计课件
- 皮肤性病科护理单元工作总结
- 2026初一年级学科带头人工作经验分享课件-班主任的专业化成长之路
- 水务集团招聘考试笔试试题及答案
- 2025-2026年江苏省苏教版小学五年级科学上册第3课实验操作测试卷
- 第十九届D2终端技术大会:淘宝 Weex 跨多端业务高效交付实践
- 2021年学校节水教育宣传制度
- 2023年江苏省五年制专转本英语统考真题(试卷+答案)
- 八年级生物上册 18.1《微生物在生物圈中的作用》教案 (新版)北师大版
- 部编版三年级上册语文全册
- 第二届全国乡村振兴职业技能大赛海南选拔赛中式面点技术文件
- 气液相反应动力学-
- 市政道路工程进度计划横道图
- 小数四则混合运算专项练习-及答案
- 管理学ch02y11数据挖掘理论与应用课件
- 凡尔赛宫 园林设计案例分析
评论
0/150
提交评论