pthread_t
の値(pthread_create()
またはstd::thread::native_hanle()
から返されたもの)をLinuxのpid(tid)にマップする方法はありますか?誰かが重複して幸せになる前に、これはではなく、で、スレッド自身のPIDを見つけることです(これはgettid()
で行うことができます)。pthread_tをpidにマップする方法(Linuxの場合)
微妙なやり方は、何とかスレッドを強制してgettid()
を呼び出し、結果を渡すことですが、それはあまりにも多くのトラブルです。
私が考えている可能性のあるアプリケーションの1つは、プログラム内で作成されたスレッド(pthread_t
が利用可能)をps -T
によって提供される出力と照合することです。
私が知る限り、linuxでは、 'pthread_t'は' struct pthread'へのポインタで、 'tid'メンバを持っています。しかし、私はこの情報を読むための許容可能な方法を知らない。使用可能なデバッグシンボルがある場合、gdbの 'ptype pthread'でこの構造体をチェックすることができます。デバッグのためだけに、 'tid'のオフセットを' p&((pthread *)0) - > tid'で読み込み、プログラム自体でこのオフセットを使って 'pthread_t'から' tid'を読み込むことができます。または、シンボルファイル自体からのオフセットを、いくつかの矮星リーダーライブラリで読み込み、 "移植可能"にすることができます。 – geza
@geza非常に興味深いことに、この情報をありがとう! – SergeyA
それはスレッドの実装の下に依存します。 linuxthreadsにプロセスIDが関連付けられている可能性があります。 'getpid'はそれを返すべきです。 posixスレッドはそうでないかもしれないので、 'getpid'はメインプロセスのPIDを返します。これを確認してください:https://stackoverflow.com/a/19677227/1143850 – Serge