的pid,每個pthread映射到一個pid,可以使用htop等工具監視pid。但我怎麼能得到一個線程的PID? getpid()只是返回主線程的pid。如何在RH Linux中獲得pthread
回答
Als downvote是因爲你說的是錯誤的。 Linux線程實際上可以用pid表示,因爲它們是輕量級的進程。事實上,在Linux unistd.h中存在以下函數:pid_t gettid(void)。另一方面,Windows具有真正的獨立線程ID。 – ThreeBit
PID是進程ID,而不是線程ID。在同一個進程上運行的線程顯然都與同一個PID相關聯。
由於pthreads嘗試是可移植的,因此無法直接獲取底層OS線程的ID。甚至有可能沒有底層的OS線程。
或者更確切地說,由於NPTL線程不再註冊爲流程。 –
我認爲你正在尋找的功能是pthread_self
線程都TIDS(線程ID),並將所有線程在同一進程(PID)運行。所以,你的線程應該都具有相同的pid,假設它們是在同一個進程中創建的,不管它們會有不同的tid。
pthread_self()給出了tid,getpid()獲取了pid。
有兩個線程值會混淆。 pthread_self()將返回POSIX線程ID; gettid()將返回操作系統線程ID。後者是Linux專用的,不保證可移植性,但可能是你真正想要的。
編輯由於PlasmaHH注意到,gettid()
通過syscall()
調用。從syscall()
手冊頁:
#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_t類型的句柄或指針,以用於pthread函數。
看到這裏的一個例子什麼是真正的世界程序可能會返回:
其實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. 如何在linux c程序中獲得pthread的線程ID?
- 2. 如何在Linux中跟蹤pthread調度?
- 3. '='預計得到RH
- 4. 如何獲得pthread處理權限?
- 5. 如何只在rh腳本中輸入rh因子
- 6. 如何在Linux中獲得java家園?
- 7. Linux Pthread參數
- 8. 如何在Linux上如何睡眠或暫停c中的PThread
- 9. RH 7.1的Linux,百勝安裝問題
- 10. 如何獲得Linux中的組列表?
- 11. 如何使用NPTL在Linux內核(> 2.6)中實現pthread?
- 12. 在Linux內核3.2中如何實現pthread?
- 13. 在Linux中獲取/設置pthread調度策略
- 14. linux上的pthread執行
- 15. 如何獲得Mysql INSERT來發信號通知pthread互斥體
- 16. 在Windows上的Linux pthread可移植性
- 17. 使用成員函數在pthread(Linux)的
- 18. 在linux上安裝PThread for tophat
- 19. LINUX如何獲得非運行PID-s?
- 20. 如何使用Linux glibc獲得LWP?
- 21. g ++:我如何獲得linux上的keystate
- 22. 獲得在Linux/Gnome的
- 23. 構建pthread以在調試器中獲取pthread名稱(GNU_SOURCE)
- 24. 如何在linux中獲得USB連接的硬盤串行?
- 25. 如何在linux中獲得usb的urb信息
- 26. 如何獲得昨天和前天在Linux中?
- 27. 在Python和linux中如何獲得用戶的ID
- 28. 如何在Java中使用Linux獲得總磁盤空間?
- 29. 如何在linux中獲得此點擊並運行效果?
- 30. 如何在C++(Linux)中獲得CPU時鐘速度?
[Linux 2.6的替換NPTL LinuxThreads的](http://drdobbs.com/open-source/184406204),Linux現在如下POSIX和正確地返回相同的PID的每個線程。 –
你應該考慮「接受」你認爲有用的答案。 –
Steve-o:也許是這樣,但linux仍然爲每個線程創建一個單獨的進程(每個線程都有自己的/ proc/,其中與主線程/進程不同) –
Rahly