7

最近のglibcを使用したLinuxについて質問しています。

プロセスが1つのスレッドまたは複数のスレッドで構成されていることを検出する方法はありますか?

スレッドはpthreadまたはbareclone()で作成できるので、かなり普遍的なものが必要です。

UPD:現在のプロセスのスレッドをそれ自体から検出したい。

4

4 に答える 4

12

ディレクトリ/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;
}
于 2010-11-08T17:09:55.223 に答える
0

'ps'を(popen()などを介して)実行してその出力を解析し、プロセスのID(getpid()によって返される)が出力に何回表示されるかを確認できると思います。より良い方法があるかもしれませんが、それが最初に頭に浮かぶことです。

于 2010-11-08T17:15:14.147 に答える
0

/ procは、Linuxでこれを行うための標準的な方法です。'ps'のようなツールは/procを介して機能します。Linux 2.6では、スレッドの数は/ proc / self / statにありますが、下位互換性はありません。

于 2010-11-08T17:30:53.763 に答える
0

ビクターからの回答は確かに最速ですが、代わりにpsライブラリの使用を検討することをお勧めします。

Ubuntuでの名前はlibprocps3-dev、次を使用してインストールするために使用します。

sudo apt-get install libprocps3-dev

ヘッダーは。の下にあり/usr/include/procます。

ライブラリは/procを読み取ることで機能することに注意してください。したがって、対象のファイルを直接読み取るのと同じですが、さまざまなバージョン間の違いを認識し、内部でそれを処理するだけです。

詳細については、 http://procps.sourceforge.net/index.htmlを参照してください。

于 2015-06-01T07:09:55.573 に答える