/proc/にtidが含まれていますか?

/proc/にtidが含まれていますか?

私のプロセスIDは1234です。プロセスにスレッドID 1235が含まれています。

を使用するとls -l /procpid(1234)のみが表示されますが、を使用してスレッドステータスファイルを開くとcat /proc/1235/statusデータが表示されます。

なぜそんなことですか?

Cコードを使ってtidに直接アクセスできますか?/proc/1235/memプロセスIDを知りませんか?

答え1

はい、/procスレッド識別子とプロセス識別子を「含む」ディレクトリエントリがありますが、後者のみが列挙されるため、getdentsプロセスls識別子のみが表示されます。これはman 5 proc、概要セクションでマニュアルページプロジェクトバージョン5.00:

/proc/[pid]サブディレクトリ

これ/proc/[pid]繰り返すと、サブディレクトリが表示されます。/プロセスそしてgetdents(2)(人が使用するときに見ることができますls(1)コンテンツを見る/プロセス)。

/proc/[tid]サブディレクトリ

これ/proc/[tid]サブディレクトリはいいえ繰り返し中に表示される/プロセスそしてgetdents(2)(したがって、いいえ使用時に見えるls(1)コンテンツを見る/プロセス)。

なぜそんなことですか?

私はこれが以前のバージョンとの互換性を維持し(スレッドが現在の形式でLinuxに存在する前に書かれたプログラムの場合)、スケーラビリティの問題を制限することだと思います。

Cコードを使ってtidに直接アクセスできますか?/proc/1235/memプロセスIDを知りませんか?

はい、tidを知れば/proc/${tid}pidを経ずにすぐにアクセスできます。

スレッドを列挙したい場合は、以下のディレクトリエントリを一覧表示できます。/proc/${tid}/task/これは、プロセス識別子だけでなく、すべてのスレッド識別子に対しても機能します。

関連情報