からpidを取得する方法は、すべてのpthreadがpidにマッピングされているため、htopなどのツールで監視できます。しかし、どうすればスレッドのPIDを得ることができますか? getpid()はメインスレッドのpidを返します。RH Linuxのpthread
答えて
は、呼び出しスレッドのIDを返すために呼び出すことができます。
また、PIDはプロセスIDです。スレッドにはPIDではなくスレッドIDがあります。同じプロセスで実行されているすべてのスレッドは同じPIDを持ちます。
あなたが言っていることは間違っているからです。 Linuxスレッドは軽量プロセスなので、実際にはpidで表すことができます。実際、以下の関数はLinux unistd.hに存在します:pid_t gettid(void)。一方、Windowsは真の独立したスレッドIDを持っています。 – ThreeBit
PIDはプロセスIDであり、スレッドIDではありません。同じプロセスで実行されるスレッドは、明らかにすべてが同じPIDに関連付けられます。
pthreadsは移植性があるため、基礎となるOSスレッドのIDを直接取得することはできません。基礎となるOSスレッドが存在しない可能性もあります。
NPTLスレッドはもはやプロセスとして登録されています。 –
私はあなたが探している機能はpthread_self
スレッドがTIDS(threadIds)を持っており、すべてのスレッドが同じプロセス(PID)で実行していると思います。したがって、スレッドは同じプロセスで作成されていると仮定して、すべて同じpidを持つ必要があります。異なるtidを持つことになります。
pthread_self()はtidを返し、getpid()はpidを取得します。
混乱するスレッド値は2つあります。 pthread_self()はPOSIXスレッドIDを返します。 gettid()はOSスレッドIDを返します。後者はLinux特有のもので、移植性は保証されていませんが、おそらくあなたが探しているものでしょう。
EDIT PlasmaHH注釈のとおり、からgettid()
が呼び出されます。 syscall()
manページから:
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
int
main(int argc, char *argv[])
{
pid_t tid;
tid = syscall(SYS_gettid);
}
pthread_selfはないはTIDを取得しています。 pthread関数での使用のために、pthread_t型のハンドルまたはポインタを提供します。
現実世界のプログラムが返すかもしれないものの例はこちらをご覧:
実際にあなたと働くことができるpthread_self
リターンpthread_t
はなく整数スレッドID、以下のヘルパー関数がでていること、あなたを取得します異なるPOSIXシステム間で移植可能な方法です。
uint64_t gettid() {
pthread_t ptid = pthread_self();
uint64_t threadId = 0;
memcpy(&threadId, &ptid, std::min(sizeof(threadId), sizeof(ptid)));
return threadId;
}
- 1. Jenkins/Hudson CI Linux RHインストールの最小要件
- 2. ウィンドウでのLinuxのpthreadの移植性
- 3. C++:Linuxでのpthreadステータス監視
- 4. ネイティブCプログラムのRhとRmath.h
- 5. Amazon EC2 Linux RHはPHPスクリプトからRDS MYSQLに接続できません
- 6. Linuxでの関数パラメータの意味Pthread Scheduling APIのプログラミング
- 7. ruby rh-ruby22のインストールとセットアップaws-sdk
- 8. Linuxのpthreadコンテキスト(スレッドID)を回復する
- 9. Linux + uClibc + pthread(C):最後にアプリケーションがフリーズする
- 10. Linuxでpthreadをトレースしていますか?
- 11. pthread mutexのオーバーヘッド?
- 12. Pthreadループのセグメンテーションフォールト
- 13. 理解のpthread
- 14. のpthread引数
- 15. のPthreadロック
- 16. pthreadの機能
- 17. Pthread Xlibのプログラミング
- 18. Pthreadプログラムカウンタ
- 19. pthreadマルチスレッド
- 20. Pthreadセグメントレジスタ
- 21. pthread(セグメンテーションフォールト)
- 22. pthreadスレッドプール?
- 23. PthreadをインストールせずにLinuxのデフォルトアプリケーションを動作させるには?
- 24. Linuxのpthreadで使用可能な物理CPUコアを使用する
- 25. pthreadはLinuxカーネル3.2でどのように実装されていますか?
- 26. のPthread Cのsyncronization
- 27. グローバル変数のpthread
- 28. pthreadスレッド状態
- 29. 遅いpthreadコンシューマ
- 30. pthreadスケジューリング方法?
[LinuxのNPTL 2.6置き換えLinuxThreadsの(http://drdobbs.com/open-source/184406204)、Linuxは今POSIXに従い、正しくスレッドごとに同じPIDを返します。 –
有用であると思われる回答を「受け入れる」ことを検討する必要があります。 –
Steve-o:Linuxでも、スレッドごとに別々のプロセスが作成されます(各スレッドは独自の/ proc/を取得します。はメインスレッド/プロセスと異なります) –
Rahly