POSIX API调用列出进程中运行的所有pthread

Man*_*res 18 c linux posix pthreads

我在POSIX/Linux环境中有一个多线程应用程序 - 我无法控制创建pthreads的代码.在某些时候,进程 - pthreads的所有者 - 收到一个信号.

该信号的处理程序应该中止,取消或停止所有pthread并记录运行的pthreads数量.

我的问题是我找不到如何列出正在运行的所有pthread.

Gil*_*il' 22

似乎没有任何可移植的方法来枚举进程中的线程.

Linux有pthread_kill_other_threads_np一个看起来像原始纯用户空间pthreads实现的剩余部分,可能会或可能不会像今天所记录的那样工作.它没有告诉你有多少线程.

您可以通过查看/proc/self(或其他流程/proc/123)获得有关您的流程的大量信息.尽管许多unices都有一个具有该名称的文件或目录,但布局完全不同,因此使用的任何代码/proc都是特定于Linux的.的文件/procDocumentation/filesystems/proc.txt在内核源代码.特别是,/proc/self/task每个线程都有一个子目录.子目录的名称是LWP id; 不幸的是,[1] [2] [3]似乎没有办法将LWP ID与pthread id相关联(但gettid(2)如果你为它工作,你可以得到你自己的线程id ).当然,阅读/proc/self/task不是原子的; 通过原子方式可以获得线程数/proc/self/status (当然,在你采取行动之前它可能会改变).

如果使用Linux pthreads提供的有限支持无法实现您想要的功能,另一种策略是使用动态链接技巧将您自己的pthread_create日志版本提供给您之后可以检查的数据结构.