2017-10-11 7 views
0

linuxでは、プロセスが実行されているときにpthread_createが呼び出されます。これにより、プロセスは同じPIDでスレッドグループIDが異なるスレッドを生成します。この新しいスレッドのスレッドグループIDを照会するにはどうすればよいですか?Linuxで実行中のプロセスのスレッドグループIDを読み取る方法

注:ソースコードからいくつかのログを追加して読むことはできません。これらの情報を得るために私が読むことができるシステム上のものはありますか?たとえば、/ proc?

+0

たぶん関連のは、同様のイントロスペクションを実行するために:[スレッドを取得する方法(LinuxのCプログラムでのpthreadのid?)(https://stackoverflow.com/q/21091000/608639)完全性のために、マニュアルページはスレッドグループIDについて議論するようには見えません。 – jww

+0

NO。私はソースコードの変更にアクセスできない。 – drdot

答えて

1

"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 
+0

私はメインプログラムに2つの子スレッドを生成していますが、1つのTgidと1つのNStgidしか見ることができません。 – drdot

+0

アプリケーションごとに1つのTgidがあります。あなたが 'clone'で何か特別なことをしない限り。それが「グループID」と呼ばれる理由です。 – oakad

+0

あなたの用語が正しくないかもしれないということが突然私に起こりました。とにかく、プログラムの実行中のスレッドをすべて見つけたい場合、それらは '/ proc/PID/task'サブディレクトリに表示されます。これはすべてのマルチスレッドアプリケーションに表示されます。そのサブディレクトリを一覧表示し、 'status'ファイルを比較して、PID、PPID、およびTGIDの仕組みを調べることができます。 – oakad

関連する問題