2011-10-27 12 views
3

アプリケーションが持つスレッドの数を調べると、すべての答えにはtopのような外部プログラムが関係します。アプリケーション自体の中のスレッドを数えたいと思います。実行中のスレッド(pthread)の数はどのように数えますか?

スレッド作成時にコードを追加することができません。これは、不変のライブラリ内で発生するためです。

/procが読み取れません。

これは、いくつかの異なるUnitsで動作するC/pthreadsプログラムです。

+0

"man ps"と 'thread'を見てください。たとえば "ps -TF -p $ pid"のように、私が推測するリモートコントロールが必要な場合は、ssh経由で実行できます。 – bestsss

+0

これは私のアプリケーションで行う必要があり、別のアプリケーションを呼び出すことではありません。 – spraff

+0

Pthreadsにスレッド数をカウントするAPIがないため、複数のカーネルスレッドを取得することさえ保証されません。プロセスをptrace(2)することはできますが、これはデバッグにのみ使用するハックです。 – rlibby

答えて

1

あなたのプログラムは、あなたが原因ポータビリティ懸念のは/ procを読みたくない場合は/proc

を読み込み、別のプログラムと通信しない限り、あなたは、トラブルのビットです/procあなたが読むことができない場合は、使用する可能性がありますlibprocのようにビットを抽象化したライブラリ

+0

libprocのヒントはありがたいですが、このロックダウン環境では動作しません。新しいライブラリを導入することは、no-noです。 – spraff

-1

トップ-Hを使用してください。しかし、あなたがprocを読むことができなければ、トップはとにかく動作しない可能性があります。それが事実なら、簡単な方法はなく、あなたの特定のシステムに依存します。

0

pthread_create用の小さなラッパーを作成して、作成したスレッドを数え、不変のライブラリにリンクした後にそのラッパーにリンクすることができます。

+1

しかし、ライブラリはラッパーを呼びません...? – spraff

+0

ライブラリはpthread_createリンク時に、またはdmallocや友人から知られているLD_PRELOADのトリックでリンク中にpthread_createの実装を提供することができます – thiton

+0

かわいいトリックですが、ここでは許可されません – spraff

関連する問題