単純な C プログラムを実行しているとします。このプログラムを実行しているスレッドを知る方法は? または、私のプログラムがプロセスに変換され、このプロセスが再びスレッドに分割されるようにする方法はありますか? コンセプト全体の間違った理解で大変申し訳ありません。私の混乱の解決策を説明する例があればとてもいいでしょう(実際にはプロセスIDを出力する方法を直接尋ねたいです--->スレッドの数、およびすべてのスレッドIDのリストを表示します)。上記の概念(ところで、それらが正しい場合)
1 に答える
特に明記しない限り、プログラムは 1 つのスレッド (メイン スレッド) だけで構成されます。(から) pthread_create を呼び出すことにより、さらにスレッドを作成できます。/proc/pid/status (pid をプロセス ID に置き換えます) を見ると、プログラム内のスレッドの正確な数を確認できます。
簡単に言えば、プロセスを 1 つ以上のスレッドのコンテナーと考えてください。実行するのはスレッド自体です (スレッドは単なるレジスタ状態です) が、プロセスには仮想メモリ イメージ、開いているファイル記述子、およびその他の "オブジェクト" が含まれます。
ステータス ファイルを見ると、「TGID」フィールドと「PID」フィールドが表示されます。「PID」は実際にはスレッド ID ですが、「TGID」はスレッド グループ ID であり、これが真のプロセス ID です。単純なプロセス (スレッドが 1 つのプロセス) の場合、これらは等しくなります。ただし、マルチスレッド (2 スレッド以上) の場合、それらはメイン スレッドに対してのみ等しくなります。このファイル以外のどこでも、「PID」は実際にはプロセス ID を意味します。Linux は UNIX 標準を模倣しているためです。
試してみたい追加のコマンド: ps -L : 「LWP」(スレッド識別子) が表示されます。マルチスレッド プロセスを示す "l" を含む ps の "STATE" 列を見れば、マルチスレッド プログラムを識別できます。