プロセスのスタック サイズを確認するにはどうすればよいですか? /proc/5848/status は VmStk を提供しますが、これは変わりません
テスト プログラムで while ループと再帰をいくら実行しても、この値はほとんど変化しません。
/proc/pid/status を見ると、すべてのプロセスに 136k があり、その値がどこから来たのかわかりません。
ありがとう、
プロセスのスタック サイズを確認するにはどうすればよいですか? /proc/5848/status は VmStk を提供しますが、これは変わりません
テスト プログラムで while ループと再帰をいくら実行しても、この値はほとんど変化しません。
/proc/pid/status を見ると、すべてのプロセスに 136k があり、その値がどこから来たのかわかりません。
ありがとう、
Linux には「プロセスのスタック サイズ」などというものは実際にはありません。プロセスには開始スタックがありますが、ご覧のとおり、標準スタックから多くを割り当てることはめったにありません。代わりに、プロセスはオペレーティング システムから汎用メモリを割り当て、それをスタックとして使用します。そのため、OS が知る方法はありません。その詳細は、プロセス内からのみ表示されます。
一般的な最新の OS では、オペレーティング システムによって 8 MB のスタック サイズ制限が課される場合があります。しかし、プロセスは通常、より大きなオブジェクトをスタックに割り当てます。これは、アプリケーションが、OS に関する限りスタックではなく、純粋にアプリケーション管理のスタックを使用しているためです。
これは、マルチスレッド プロセスでは常に当てはまります。シングルスレッド プロセスの場合、実際にはごくわずかなスタックしか使用していない可能性があります。
あるプロセスのアドレスマップを取得したいだけかもしれません。/proc/1234/maps
プロセス 1234 では、疑似ファイルを順次読み取ります。あなた自身のプロセスについては、読んでください/proc/self/maps
試す
cat /proc/self/maps
それを感じてください(上記のコマンドは、cat
それを実行しているプロセスのアドレスマップを表示します)。
詳細については、 proc(5)の man ページを参照してください。
getrlimit(2)や関連するシステムコールなどのプロセス制限にも興味があるかもしれません。
特にマルチスレッドプロセスの場合、スタックサイズに正確な意味があるかどうかはわかりません。
たぶん、あなたはmmap(2)で編集されたセグメントに興味があるでしょうMAP_GROWSDOWN
。