🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

3 total messages Started by Haruhiro Soma Wed, 01 Apr 1998 00:00
Details of Processes
#560
Author: Haruhiro Soma
Date: Wed, 01 Apr 1998 00:00
17 lines
1195 bytes
UNIX の中で走行中のプログラムのプロセスの内容について、以下の点
が知りたいのですが、御存じの方がいらっしゃれば、教えて下さい。

(1) コンピュータ内で生きている各プロセスのカレントディレクトリー
    をどの様にして知るか。

(2) 各プロセスのメモリ使用状況を細かく知りたいのです。それは C 言語で
    書かれたプログラムばかりですが、C の書き方を改善する為の情報として
    以下のデータが知りたいのです。

    他のプロセスと共用している領域の大きさ
    そのプロセスのみで使用している領域の大きさ
    プロセスの使用しているヒープ領域の大きさ

==========
相馬晴広
Re: Details of Processes
#565
Author: Ryo
Date: Wed, 01 Apr 1998 00:00
61 lines
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
#446
Author: Makoto Ohki
Date: Thu, 02 Apr 1998 00:00
42 lines
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