最近のglibcを使用したLinuxについて質問しています。
プロセスが1つのスレッドまたは複数のスレッドで構成されていることを検出する方法はありますか?
スレッドはpthreadまたはbareclone()で作成できるので、かなり普遍的なものが必要です。
UPD:現在のプロセスのスレッドをそれ自体から検出したい。
最近のglibcを使用したLinuxについて質問しています。
プロセスが1つのスレッドまたは複数のスレッドで構成されていることを検出する方法はありますか?
スレッドはpthreadまたはbareclone()で作成できるので、かなり普遍的なものが必要です。
UPD:現在のプロセスのスレッドをそれ自体から検出したい。
ディレクトリ/proc/ YOUR_PID /task/にサブディレクトリが1つだけ含まれているかどうかを確認します。処理中のスレッドが複数ある場合は、いくつかのサブディレクトリがあります。
ハードリンクカウントは、サブディレクトリをカウントするために使用できます。この関数は、現在のスレッド数を返します。
#include <sys/stat.h>
int n_threads(void)
{
struct stat task_stat;
if (stat("/proc/self/task", &task_stat))
return -1;
return task_stat.st_nlink - 2;
}
'ps'を(popen()などを介して)実行してその出力を解析し、プロセスのID(getpid()によって返される)が出力に何回表示されるかを確認できると思います。より良い方法があるかもしれませんが、それが最初に頭に浮かぶことです。
/ procは、Linuxでこれを行うための標準的な方法です。'ps'のようなツールは/procを介して機能します。Linux 2.6では、スレッドの数は/ proc / self / statにありますが、下位互換性はありません。
ビクターからの回答は確かに最速ですが、代わりにpsライブラリの使用を検討することをお勧めします。
Ubuntuでの名前はlibprocps3-dev
、次を使用してインストールするために使用します。
sudo apt-get install libprocps3-dev
ヘッダーは。の下にあり/usr/include/proc
ます。
ライブラリは/procを読み取ることで機能することに注意してください。したがって、対象のファイルを直接読み取るのと同じですが、さまざまなバージョン間の違いを認識し、内部でそれを処理するだけです。
詳細については、 http://procps.sourceforge.net/index.htmlを参照してください。