2012-02-27 3 views
0

私は、子プロセスから呼び出されるすべてのシステムコールをトレースし、その正確なメモリ使用量を決定するプログラムを作成しています。は、Linuxの特定のプロセスで使用されているメモリの量を計算します。

ここは私の計画です。

父プロセスによってptraceさLETの子プロセス、

子プロセスがシステムコールを行う場合、父親のプロセスはSIGTRAPを受け取るだろう、

、その後のptrace(PTRACE_PEEKUSER、child_pid、4 *のORIG_EAX、NULL)でシステムコールIDを取得。

idは、私はコールのパラメータを取得し、メモリ使用量を計算することができる午前SYS_brk、SYS_sbrk、SYS_mmap2、SYS_mmap、SYS_mremap、SYS_munmap、

に等しいです。

が、それは

  1. 私が計算するかどうかはわかりませんことを私困ります。

  2. SYS_mmap2には6つ以上のパラメータがありますが、どうすれば入手できますか?

+4

もあります'ps'の出力を解析しますか? –

+0

@DietrichEpp、少なくともあなたは 'libprocps4-dev'のようなライブラリを使い、psの出力は読まないでください。 –

答えて

2

PID 1234のプロセスのメモリ使用量を決定するために、Iを順次読み出して/proc/1234/mapsまたは/proc/1234/smaps擬似ファイルの解析を示唆しています。 /proc/1234/下の他のファイルは、関連する(例えば/proc/1234/statm/proc/1234/status

プロセスの内側から、あなたが/proc/self/mapsまたは/proc/self/smaps(および例えば/proc/self/statm/proc/self/status)を読むことができる可能性があります。

詳細はproc(5)のマニュアルページを参照してください。

例えばと間違って何pmapコマンド

+0

[スタック]はpmapによって返されたものです。 – lx75249

+0

'[stack]'は '/ proc/1234/maps'の中にあり、' pmap'が実際に読み込んでいます。 –

関連する問題