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 ) < 0 )
{
perror( "ioctl" );
exit( 7 );
}
if ( counter > 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()调用,结果未知 。
◆ 结论
当痛苦调试程序或者试图获取指定进程状态的时候,/proc文件系统将是你强有力的支持者 。通过它可以创建更强大的工具,获取更多信息 。
推荐阅读
- ios11 beta3描述文件在哪?ios11 beta3固件地址
- 制作UNIX文件系统的iso文件
- Solaris8 公用桌面环境管理的主要配置文件
- ktv你怎么理解
- 第十四章:文件系统挂接 Solaris系统管理培训
- wps中将et文件打开具体操作流程
- fsck命令
- ufsdump ufsrestore Solaris 文件系统备份与恢复
- Win10系统中将Windows文件保护关闭具体操作方法
- Process Solaris 处理程序的控制
