2009-03-31 11 views
1

質問があります:C++アプリケーションのLinux 2.6でSPIDに何らかの方法がありますか?C++からlinux 2.6でSPIDを取得する方法

[email protected]:~# 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 - 

そしてファイルシステムで、私はスレッドを見ることができます:私は「PS -amT」私は、プロセス内のスレッドを見ることができます行うと

[email protected]:~# ls /proc/1120/task/ 
1120 1125 1126 1128 1129 1130 1131 

をだから私はできるいくつかの方法があります私のアプリケーションからSPIDを取得して、実行中のスレッドごとにSPIDが何であるかを何とか識別できますか?

ありがとうございます!

/マイク

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

私は私のスレッドにこのコードを追加します。psによってまたはprocファイルシステムに与えられたSPIDのように見えるどちらも

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

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

私はこの結果を得ます。

また、gettid does not return the SPIDに注意してください。

+0

gettidがSPIDを返さないとのリンクはどこにありますか?あなたがエラー(-1を返した)を得たという事実から、あなたは悪天候の数字を間違っていると思う。 224は一部のアーキテクチャでのみ動作します。 – jpalecek

+0

-1を返すと、おそらくシステムコールにエラーがあることを意味します。 errnoを見てください。あなたはそれを正しく呼んでいると確信していますか? syscall()を使うのは間違っている。とにかく番号ではなく名前(SYS_gettid)を使用してください。 syscall(SYS_gettid)は私のために働きます。 – MarkR

答えて

5

gettid()

編集:あなたのlibcはgettid()関数を持っていない場合、あなたはこのようにそれを実行する必要があります。

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

...またはexample on this manual pageを参照してください。

+0

返事をありがとう。 c.f.最新の編集では、gettid呼び出しはSPIDを返しません。 – mikelong

+1

syscall()を使用しました。ありがとう! – mikelong

関連する問題