2012-12-06 5 views
5

プロセスのスタックサイズを見つけるにはどうすればよいですか? /proc/5848/statusは私にVmStkを与えますが、これは変わりませんプロセスのスタックサイズを測定する方法は?

私はテストプログラムでループや再帰をしていてもほとんど変わりません。

私が/ proc/pid/statusを見ると、すべてのプロセスに136kがあり、その値がどこから来るのか分かりません。

ありがとう、

+1

マルチスレッドプロセスの個々のスレッドのスタックサイズを取得しようとしていますか? –

答えて

3

実際には、Linuxでは「プロセスのスタックサイズ」はありません。プロセスは開始スタックを持っていますが、わかるように、標準スタックから多くを割り当てることはめったにありません。その代わりに、プロセスはオペレーティングシステムから汎用メモリを割り当ててスタックとして使用します。したがって、OSが知るべき方法はありません。詳細はプロセス内部からしか見えません。

標準的な最新のOSのスタックサイズは、オペレーティングシステムによって8MBに制限されていることがあります。それでも、プロセスは、より大きなオブジェクトをスタックに定期的に割り当てます。これは、アプリケーションが、純粋にアプリケーション管理されていて、OSに関する限りスタックではないスタックを使用しているためです。

これは、マルチスレッドプロセスでは常に当てはまります。シングルスレッドプロセスの場合、実際には非常に小さなスタックしか使用していない可能性があります。

1

多分あなたはちょうどいくつかのプロセスのアドレスマップを取得したいです。プロセス1234については、擬似ファイル/proc/1234/mapsを順番に読み取ります。独自のプロセスでは、(上記のコマンドがそれを実行catプロセスのアドレスマップを表示する)ことの感覚を得るために

cat /proc/self/maps 

を試してみてください/proc/self/maps

をお読みください。

詳細はproc(5)マニュアルページをお読みください。

また、プロセスの制限があります。 getrlimit(2)および関連するシステムコール。

スタックサイズが、特にマルチスレッドプロセスの場合には、正確な意味を持っているかどうかはわかりません。

多分mmap(2)のセグメントに興味があり、MAP_GROWSDOWNとなります。