在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. 使用dwarf2获取堆栈指针的堆栈指针值
- 4. 基指针和堆栈指针
- 5. 堆栈指针VS应用
- 6. 汇编堆栈指针AVR
- 7. 堆栈指针和分割
- 8. 初始化堆栈指针
- 9. 找出指针是指向堆栈,堆或程序文本吗?
- 10. 返回指令堆栈中的指针
- 11. 线程堆和堆栈
- 12. 如何判断指针是指向堆栈还是指向堆?
- 13. WebAssembly堆栈/堆栈指针初始化和内存布局
- 14. 堆栈TOP指针始终为空
- 15. C++,堆栈和结构指针
- 16. 堆栈指针寄存器值
- 17. 在ATtiny2313上初始化堆栈指针
- 18. C++指针和堆栈内存管理
- 19. 查看堆栈指针在Xcode
- 20. 堆栈指针的值是多少?
- 21. C++中的指针和堆栈
- 22. Linux下的伪随机堆栈指针?
- 23. ARM汇编 - 监视器堆栈指针
- 24. 堆栈溢出或指针错误?
- 25. JMP做什么堆栈和帧指针?
- 26. C链接列表堆栈和指针
- 27. 为什么指针不在堆栈上?
- 28. 从堆栈指针减去对齐?
- 29. 使用指针实现堆栈
- 30. C中指针堆栈溢出
目前,BjoernD –
什么是 '运行计数'?它在CPU上运行的次数?上下文切换的数量?时间片的数量? – bdonlan
@bdonlan:我是在它运行的#次之后,但所有其他的,如果可能的话,也会很棒! –