节选自赛迪网
引用: |
/proc虚拟文件系统 /proc虚拟文件系统(也叫procfs)是Unix操作 系统所使用的虚拟文件系统的Linux实现,包括Sun Solaris、LinuxBSD。在/proc开始时,它以一个标准文件系统出现,并包含与正在运行的进程IDs同样名字的文件。然而,在/proc中的文件不占用磁盘空间,它们存在于工作存储器(内存)中。/proc最初的目的是便于进程信息的存取,但是现在,在Linux中,它可被内核的每一部分使用来报告某些事情。 在/proc文件系统提供的成百上千的值当中,我们将集中考虑集群监控所需的最小集,它们包括? ◆ /proc/loadavg:包含系统负载平均值; ◆ /proc/meminfo:包含存储管理统计量; ◆ /proc/net/dev:包含网卡度量; ◆ /proc/stat:包含内核统计量; ◆ /proc/uptime:包含总的系统正常工作时间及空闲时间。 每个文件提供的值的数量是不同的。这些文件的完整有效值列表如下。 ◆ /proc/loadavg提供以下数据: 1秒钟平均负载; 5秒钟平均负载; 15秒钟平均负载; 总作业数; 正在运行的作业总数。 ◆ /proc/meminfo提供的存储器信息包括: 活动存储器; 不活动存储器; 缓冲存储器; 高速缓冲存储器; 总的自由存储器; 总的高位存储器; 自由高位存储器; 总的低位存储器; 自由低位存储器; 共享存储器; 交换存储器; 交换高速缓冲存储器; 交换自由存储器; 总存储器。 ◆ /proc/net/dev中包括每个网卡的如下数据: 接收到的字节; 接收到的压缩字节; 收到的误码数; 收到的漏失误码; 收到的FIFO误码; 收到的帧误码; 收到的多播误码; 收到的总包数; 已传输的字节; 已传输的压缩字节; 传输误码总数; 传输载波误码; 传输冲突误码; 传输漏失误码; 传输FIFO误码; 传输的总包数。 ◆ /proc/stat提供: 引导时间; 上下文切换数量; 中断总量; 进页面总数; 出页面总数; 进程总数; 换入总数; 换出总数; 合计CPU空闲时间; 合计CPU nice时间; 合计CPU系统时间; 合计CPU用户时间。 同时提供对每个CPU的: 单个CPU空闲时间; 单个CPU nice时间; 单个CPU系统时间; 单个CPU用户时间。 以及对每个磁盘驱动器的如下数据: 单个磁盘块读; 单个磁盘块写; 单个磁盘I/O总数; 单个磁盘I/O读; 单个磁盘I/O写。 ◆ /proc/uptime中包括: 系统总工作时间; 系统总空闲时间。 |
关于/proc的一些东西还可以参考:http://www.linuxfans.org/nuke/modules.php?name=News&file=article&op=view&sid=2609
在/proc,我们可以看到很多原来在内核理论里看到的东西,像时间片、上下文转换、进程的相关内容......它们现在就活生生的在我们面前,我们可以通过查看、修改这些值,来了解现在就在我们电脑上运行的这个linux。
下面是一个用C写的小程序,编译运行(如果还不会请参看公社的相关版面)以后运行,可以看到CPU型号和内核版本信息。这只是个小小小程序,你可以修改它打开的文件以显示其他的信息,也可以用程序来修改内核的一些参数。
redhat fc5
#include
<
stdio.h
>
/* get the NUMth line of a file */
char * getN( char line[ 200 ], int n, FILE * iop)
{
rewind(iop);
int i;
for ( i = 1 ; i <= n ; i ++ )
fgets(line, 1000 , iop);
return line;
}
main( int argc, char * argv[])
{
FILE * fp;
char str[ 200 ];
if ((fp = fopen( " /proc/cpuinfo " , " r " )) == NULL){
printf( " Open Error " );
return ;
}
getN(str, 5 ,fp);
printf( " %s " ,str);
fclose(fp);
if ((fp = fopen( " /proc/version " , " r " )) == NULL){
printf( " Open Error " );
return ;
}
getN(str, 1 ,fp);
printf( " %s " ,str);
fclose(fp);
}
/* get the NUMth line of a file */
char * getN( char line[ 200 ], int n, FILE * iop)
{
rewind(iop);
int i;
for ( i = 1 ; i <= n ; i ++ )
fgets(line, 1000 , iop);
return line;
}
main( int argc, char * argv[])
{
FILE * fp;
char str[ 200 ];
if ((fp = fopen( " /proc/cpuinfo " , " r " )) == NULL){
printf( " Open Error " );
return ;
}
getN(str, 5 ,fp);
printf( " %s " ,str);
fclose(fp);
if ((fp = fopen( " /proc/version " , " r " )) == NULL){
printf( " Open Error " );
return ;
}
getN(str, 1 ,fp);
printf( " %s " ,str);
fclose(fp);
}