Thread View: fj.lang.c
3 messages
3 total messages
Started by Haruhiro Soma
Wed, 01 Apr 1998 00:00
Details of Processes
Author: Haruhiro Soma
Date: Wed, 01 Apr 1998 00:00
Date: Wed, 01 Apr 1998 00:00
17 lines
1195 bytes
1195 bytes
UNIX の中で走行中のプログラムのプロセスの内容について、以下の点
が知りたいのですが、御存じの方がいらっしゃれば、教えて下さい。
(1) コンピュータ内で生きている各プロセスのカレントディレクトリー
をどの様にして知るか。
(2) 各プロセスのメモリ使用状況を細かく知りたいのです。それは C 言語で
書かれたプログラムばかりですが、C の書き方を改善する為の情報として
以下のデータが知りたいのです。
他のプロセスと共用している領域の大きさ
そのプロセスのみで使用している領域の大きさ
プロセスの使用しているヒープ領域の大きさ
==========
相馬晴広
Re: Details of Processes
Author: Ryo
Date: Wed, 01 Apr 1998 00:00
Date: Wed, 01 Apr 1998 00:00
61 lines
2059 bytes
2059 bytes
Haruhiro Soma wrote:
>
> UNIX の中で走行中のプログラムのプロセスの内容について、以下の点
> が知りたいのですが、御存じの方がいらっしゃれば、教えて下さい。
>
> (1) コンピュータ内で生きている各プロセスのカレントディレクトリー
> をどの様にして知るか。
>
> (2) 各プロセスのメモリ使用状況を細かく知りたいのです。それは C 言語で
> 書かれたプログラムばかりですが、C の書き方を改善する為の情報として
> 以下のデータが知りたいのです。
>
> 他のプロセスと共用している領域の大きさ
> そのプロセスのみで使用している領域の大きさ
> プロセスの使用しているヒープ領域の大きさ
>
> ==========
> 相馬晴広
(2)だけなら次のような簡単な方法である程度解決できますね。
#ifdef MEM_MONITOR
#define MALLOC __malloc
#define FREE __free
#else
#define MALLOC malloc
#define FREE free
#endif
#ifdef MEM_MONITOR
void * __malloc( size_t sz )
{
int ii;
void * adr;
for(ii=0;ii<MEM_HOOK_NUM;ii++) {
if(mem_hook[ii].used == 0) {
if(NULL != (adr = malloc(sz))) {
mem_hook[ii].used = 1;
mem_hook[ii].pid = プロセスIDを得るシステムコール;
mem_hook[ii].time = システム時刻を得るシステムコール;
mem_hook[ii].adr = adr;
}
}
}
return NULL;
}
void ____free( void * adr )
{
for(ii=0;ii<MEM_HOOK_NUM;ii++) {
if(mem_hook[ii].adr == adr) {
mem_hook[ii].used = 0;
}
}
}
#endif
---------------------
Ryo
---------------------
Re: Details of Processes
Author: Makoto Ohki
Date: Thu, 02 Apr 1998 00:00
Date: Thu, 02 Apr 1998 00:00
42 lines
2213 bytes
2213 bytes
IY8H-SOMA@j.asahi-net.or.jp (Haruhiro Soma) writes: > > UNIX の中で走行中のプログラムのプロセスの内容について、以下の点 > が知りたいのですが、御存じの方がいらっしゃれば、教えて下さい。 > > (1) コンピュータ内で生きている各プロセスのカレントディレクトリー > をどの様にして知るか。 コマンドとしてなら、例えば Sun Solaris2.x の場合 /usr/proc/bin/pwdx に pid を引数として与えれば、そのカレントディレクトリーをアウトプットし てくれます。 プログラム中のシステムコールにもそれに相当するものがあるはずですが、 今すぐには思い出せません。ちなみに /usr/include/sys/proc.h 同/user.h 同/procfs.h あたりを見ると (1) と 下の (2) のデータを保有する struct が 記載されていたと思います。(以上は Sun Solaris2.x の例) > > (2) 各プロセスのメモリ使用状況を細かく知りたいのです。それは C 言語で > 書かれたプログラムばかりですが、C の書き方を改善する為の情報として > 以下のデータが知りたいのです。 > > 他のプロセスと共用している領域の大きさ > そのプロセスのみで使用している領域の大きさ > プロセスの使用しているヒープ領域の大きさ > > ========== > 相馬晴広 > 自作の道具を作る場合は、上記を参考にして下さい。 既成のものてしては、また Sun の例ですが、memtool というものが あります。これは、shared と private 領域の区別までしてくれます。 URL は http://www.sun.com/sunworldonline/swol-03-1998/swol-03-perf.html です。これで、希望すると、自動 email で memtool を送ってくれます。 今も有効かどうかは確認していません。 ------ 大木誠
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads