web-dev-qa-db-ja.com

Linuxでスレッドに名前を付ける方法は?

C/C++で書かれたマルチスレッドLinuxアプリケーションを持っています。 スレッドに選択した名前 があります。デバッグを支援するために、これらの名前をGDBや「トップ」などに表示したいのですが、これは可能ですか?

(たくさんあります スレッド名を知る理由 。今、どのスレッドが50%のCPUを使用しているのか知りたいです( 'top'によって報告されたように)。そして、デバッグするとき、頻繁に切り替える必要があります別のスレッドに-現在私は "thread apply all bt "次に、バックトレース出力のページを調べて、適切なスレッドを見つけます。

Windowsソリューションはこちら ; Linuxのものは何ですか?

39
user9876

Posixスレッド?

これは明らかにコンパイルされませんが、それはあなたが狩猟に行く場所のアイデアをあなたに与えるでしょう。それが正しいかどうかさえわかりませんPR_コマンドですが、そうだと思います。久しぶり...

  #include <sys/prctl.h>
  prctl(PR_SET_NAME,"<null> terminated string",0,0,0)
43
Fusspawn

[〜#〜] ace [〜#〜] のようなライブラリを使用している場合、 Thread を使用すると、新しいスレッドを作成するときにスレッド名を指定できます。

BSD Unixには pthread_set_name_np 呼び出しもあります。

それ以外の場合は、Fusspawnで言及されているように prctl を使用できます。

14
lothar