私のプロセスIDは1234です。プロセスにスレッドID 1235が含まれています。
を使用するとls -l /proc
pid(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/
これは、プロセス識別子だけでなく、すべてのスレッド識別子に対しても機能します。