在Linux中2.6.32-32,是有沒有辦法找到一個pthreads
程序編程線程下列信息?我需要:運行計數,堆棧指針,堆棧開始/結束,堆棧大小,堆棧使用情況。我想,就像ThreadX,但在一個程序中。謝謝。線程堆棧指針
線程堆棧指針
回答
- pthread_getattr_np()應該給你一個線程
- pthread_attr_getstack()返回堆棧地址和大小
- 我不知道你的運行計數的意思的並行線程屬性。
- 比你目前的一個不同的線程,你可能需要使用ptrace的堆棧指針。一旦你有了它,你可以用它來做數學來確定使用多少堆棧。
爲了獲得自己的堆棧指針,你總是可以做線沿線的東西:
mword sp;
asm volatile ("mov %esp, $0" : "=r"(sp));
這是一個很好的答案,謝謝。也許你可以用sthg來幫助我:當讓系統使用默認值時,'pthread_attr_getstack()'返回「0」作爲大小和地址。有沒有一種方法可以在不通過'pthread_attr_setstackaddr()'和size來設置它們的情況下返回這些信息?再次感謝。 –
@Dervin,堆棧大小可以是無限的。在Linux上,通常你會從一個堆棧頁面加上幾個保護頁面開始;如果您在防護頁上發生故障,堆棧將展開。線程可能會繼續增加堆棧直到遇到其他映射,此時它將會SIGBUS。這很難說明問題 - 正在進行不連續堆棧的工作;當你的堆棧中的空間用完時,它只會將你切換到一個新的堆棧段;當函數返回時,它將切換回舊堆棧。 – bdonlan
嗯。我擔心繫統的默認值可能會有所不同。對於堆棧大小似乎是一個資源限制RLIMIT_STACK,您可以查詢:http://linux.die.net/man/2/setrlimit 有關如何查找從一開始不知道。您可能在線程的早期函數中讀取初始堆棧指針,然後假定堆棧與某個地址正確對齊,嘗試猜測堆棧區域的基址。儘管如此,這只是手動。 – BjoernD
作爲附錄BjoernD的回答,您可以獲取使用getrusage
呼叫上下文切換次數和總運行時間與RUSAGE_THREAD
。您無法獲得有關執行時間片的原始數量的信息;這些信息並沒有被首先跟蹤。
謝謝你。我不得不接受BjoernD的答案,因爲他首先回答和正確的,但我已經upvoted你,我也upvoted你的答案的另一個之一(另一個問題),所以它幾乎等於被接受:) –
- 1. ANDing堆棧指針
- 2. 堆棧幀和堆棧指針
- 3. 中斷堆棧的堆棧指針
- 4. 使用dwarf2獲取堆棧指針的堆棧指針值
- 5. 基指針和堆棧指針
- 6. 堆棧指針和分割
- 7. 堆棧指針VS應用
- 8. 彙編堆棧指針AVR
- 9. 初始化堆棧指針
- 10. 找出指針是指向堆棧,堆或程序文本嗎?
- 11. x86堆棧指針指向哪裏?
- 12. 添加指向堆棧的指針C
- 13. 返回指令堆棧中的指針
- 14. 線程堆和堆棧
- 15. 如何判斷指針是指向堆棧還是指向堆?
- 16. 8086中的堆棧段和堆棧指針
- 17. 堆棧由指針在C工作,除了在堆棧下溢
- 18. WebAssembly堆棧/堆棧指針初始化和內存佈局
- 19. 繪製堆棧和線程程序堆
- 20. C++中的指針和堆棧
- 21. C++指針和堆棧內存管理
- 22. 堆棧指針的值是多少?
- 23. Linux下的僞隨機堆棧指針?
- 24. C++,堆棧和結構指針
- 25. 使用指針實現堆棧
- 26. 使用函數,類和堆棧指針
- 27. 用指針損壞的C++堆棧
- 28. 堆棧TOP指針始終爲空
- 29. 免費指針從堆棧結構C
- 30. 移動堆棧指針在大會
目前,BjoernD –
什麼是 '運行計數'?它在CPU上運行的次數?上下文切換的數量?時間片的數量? – bdonlan
@bdonlan:我是在它運行的#次之後,但所有其他的,如果可能的話,也會很棒! –