16

ps(または同様のツール) で pthread の名前を表示する方法はありますか? 次の簡単なプログラムを書きました。

// th_name.c
#include <stdio.h>
#include <pthread.h>

void * f1() {
    printf("f1 : Starting sleep\n");
    sleep(30);
    printf("f1 : Done sleep\n");
}

int main() {

    pthread_t  f1_thread;
    pthread_create(&f1_thread, NULL, f1, NULL);
    pthread_setname_np(f1_thread, "f1_thread");

    printf("Main : Starting sleep\n");
    sleep(40);
    printf("Main : Done sleep\n");
    return 0;

}

ps上記のプログラムのスレッドとその名前を表示するために使用できるコマンド/ユーティリティ ( など) はありますか。

$ /tmp/th_name > /dev/null &
[3] 2055
$ ps -eLf | egrep "th_name|UID"
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
aal      31088 29342 31088  0    2 10:01 pts/4    00:00:00 /tmp/th_name
aal      31088 29342 31089  0    2 10:01 pts/4    00:00:00 /tmp/th_name
aal      31095 29342 31095  0    1 10:01 pts/4    00:00:00 egrep th_name|UID

Ubuntu 12.10 でプログラムを実行しています。

4

3 に答える 3

12

スレッドの名前を取得する方法を示したpthread_setname_np()の man ページに注意してください。

pthread_setname_np() は、/proc ファイルシステムの下にあるスレッド固有の通信ファイル (/proc/self/task/[tid]/comm) に内部的に書き込みます。pthread_getname_np() は同じ場所から取得します。

以下のプログラムは、pthread_setname_np() と pthread_getname_np() の使用法を示しています。

次のシェル セッションは、プログラムの実行例を示しています。

$ ./a.out

スレッドを作成しました。デフォルト名: a.out

設定後のスレッド名はTHREADFOOです。

^Z #プログラムを一時停止

1 + 停止 ./a.out

$ ps H -C a.out -o 'pid tid cmd comm'

PID TID CMD コマンド

5990 5990 ./a.out a.out

5990 5991 ./a.out THREADFOO

$ 猫/proc/5990/タスク/5990/comm

a.out

$ 猫/proc/5990/タスク/5991/comm

スレッドフー

于 2013-07-08T01:25:55.557 に答える