2

質問があります: Linux 2.6 の SPID を C++ アプリケーションから取得する方法はありますか? 「ps -amT」を実行すると、プロセス内のスレッドが表示されます。

root@10.67.100.2:~# ps -amT
  PID  SPID TTY          TIME CMD
 1120     - pts/1    00:00:20 sncmdd
    -  1120 -        00:00:00 -
    -  1125 -        00:00:00 -
    -  1126 -        00:00:00 -
    -  1128 -        00:00:00 -
    -  1129 -        00:00:09 -
    -  1130 -        00:00:00 -
    -  1131 -        00:00:09 -
 1122     - pts/1    00:00:00 snstatusdemuxd
    -  1122 -        00:00:00 -
    -  1127 -        00:00:00 -
    -  1132 -        00:00:00 -
    -  1133 -        00:00:00 -

そして、ファイルシステムでスレッドを確認できます:

root@10.67.100.2:~# ls /proc/1120/task/
1120  1125  1126  1128  1129  1130  1131

アプリケーションから SPID を取得して、実行中の各スレッドで SPID を特定する方法はありますか?

ありがとう!

/マイク

編集: getpid() から返される PID は各スレッドで同じであることを追加する必要があります。

このコードをスレッドに追加すると:

// Log thread information to syslog
syslog(LOG_NOTICE, "ibnhwsuperv: gettid()= %ld,  pthread_self()=%ld", (long int)syscall(224), pthread_self());

私はこの結果を得ます:

Jan  1 01:24:13 10 ibnhwsupervd[1303]: ibnhwsuperv: gettid()= -1,  pthread_self()=839027488

どちらも、ps または proc ファイルシステムで指定された SPID のようには見えません。

また、 gettid は SPID を返さないことに注意してください。

4

1 に答える 1

6

gettid()はどうですか?

編集: libc に gettid() 関数がない場合は、次のように実行する必要があります。

#include <sys/syscall.h>
syscall(SYS_gettid);

... または、このマニュアル ページの例を参照してください。

于 2009-03-31T07:51:37.647 に答える