9 ) { fprintf( stdout, "PIDtIMAGEttR。理解/proc文件系統(tǒng)( 三 )。" />

日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

理解/proc文件系統(tǒng)( 三 )



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下文件,這樣做的好處在于即使系統(tǒng)升級(jí)后/proc布局改變,內(nèi)核中相應(yīng)ioctl cmd支持也隨之改變,對(duì)于應(yīng)用層的開(kāi)發(fā)者,接口一樣,源代碼可平穩(wěn)移植 。事實(shí)上從作者前面舉例來(lái)看, memlook.c是在Solaris 2.6以前的版本上開(kāi)發(fā)的,但我并未修改就可以直接用在Solaris 2.6上,雖然此時(shí)/proc布局已經(jīng)發(fā)生重大變化 。

仔細(xì)閱讀prstatus和prpsinfo結(jié)構(gòu),尋找那些你敢興趣的成員 。在未能真正掌握這種技術(shù)之前不要針對(duì)/proc文件系統(tǒng)使用write()或者ioctl() 。針對(duì)特定進(jìn)程胡亂做write()調(diào)用,結(jié)果未知 。

◆ 結(jié)論

當(dāng)痛苦調(diào)試程序或者試圖獲取指定進(jìn)程狀態(tài)的時(shí)候,/proc文件系統(tǒng)將是你強(qiáng)有力的支持者 。通過(guò)它可以創(chuàng)建更強(qiáng)大的工具,獲取更多信息 。

推薦閱讀