linuxでは、プロセスが実行されているときにpthread_createが呼び出されます。これにより、プロセスは同じPIDでスレッドグループIDが異なるスレッドを生成します。この新しいスレッドのスレッドグループIDを照会するにはどうすればよいですか?Linuxで実行中のプロセスのスレッドグループIDを読み取る方法
注:ソースコードからいくつかのログを追加して読むことはできません。これらの情報を得るために私が読むことができるシステム上のものはありますか?たとえば、/ proc?
linuxでは、プロセスが実行されているときにpthread_createが呼び出されます。これにより、プロセスは同じPIDでスレッドグループIDが異なるスレッドを生成します。この新しいスレッドのスレッドグループIDを照会するにはどうすればよいですか?Linuxで実行中のプロセスのスレッドグループIDを読み取る方法
注:ソースコードからいくつかのログを追加して読むことはできません。これらの情報を得るために私が読むことができるシステム上のものはありますか?たとえば、/ proc?
"go to"ファイルは/proc/PID/status
になります。 Linuxプロセスについて知りたかった情報は、通常はそこにあります。ランダム例(実際のスレッドグループIDのどちらかで、通常は同じ、欠けているコンテナ環境ですTGIDまたはNStgid、):
# cat /proc/8646/status
Name: udevd
Umask: 0022
State: S (sleeping)
Tgid: 8646
Ngid: 0
Pid: 8646
PPid: 1584
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 64
Groups:
NStgid: 8646
NSpid: 8646
NSpgid: 1584
NSsid: 1584
// skipped
私はメインプログラムに2つの子スレッドを生成していますが、1つのTgidと1つのNStgidしか見ることができません。 – drdot
アプリケーションごとに1つのTgidがあります。あなたが 'clone'で何か特別なことをしない限り。それが「グループID」と呼ばれる理由です。 – oakad
あなたの用語が正しくないかもしれないということが突然私に起こりました。とにかく、プログラムの実行中のスレッドをすべて見つけたい場合、それらは '/ proc/PID/task'サブディレクトリに表示されます。これはすべてのマルチスレッドアプリケーションに表示されます。そのサブディレクトリを一覧表示し、 'status'ファイルを比較して、PID、PPID、およびTGIDの仕組みを調べることができます。 – oakad
たぶん関連のは、同様のイントロスペクションを実行するために:[スレッドを取得する方法(LinuxのCプログラムでのpthreadのid?)(https://stackoverflow.com/q/21091000/608639)完全性のために、マニュアルページはスレッドグループIDについて議論するようには見えません。 – jww
NO。私はソースコードの変更にアクセスできない。 – drdot