質問があります: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に注意してください。
gettidがSPIDを返さないとのリンクはどこにありますか?あなたがエラー(-1を返した)を得たという事実から、あなたは悪天候の数字を間違っていると思う。 224は一部のアーキテクチャでのみ動作します。 – jpalecek
-1を返すと、おそらくシステムコールにエラーがあることを意味します。 errnoを見てください。あなたはそれを正しく呼んでいると確信していますか? syscall()を使うのは間違っている。とにかく番号ではなく名前(SYS_gettid)を使用してください。 syscall(SYS_gettid)は私のために働きます。 – MarkR