gpt4 book ai didi

c - POSIX API 调用以列出进程中运行的所有 pthreads

转载 作者:IT王子 更新时间:2023-10-29 00:20:39 31 4
gpt4 key购买 nike

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

该信号的处理程序应该中止、取消或停止所有 pthreads 并记录有多少 pthreads 正在运行。

我的问题是我找不到如何列出进程中运行的所有 pthreads 的方法。

最佳答案

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

Linux 有 pthread_kill_other_threads_np,它看起来像是原始的纯用户态 pthreads 实现的遗留物,可能会也可能不会像今天记录的那样工作。它不会告诉您有多少线程。

通过查看 /proc/self(或者,对于其他进程,/proc/123),您可以获得有关进程的大量信息。尽管许多 unice 都有同名的文件或目录,但布局完全不同,因此使用 /proc 的任何代码都将是 Linux 特定的。 /proc的文档在内核源码的Documentation/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 版本以记录到数据结构您可以事后检查。

关于c - POSIX API 调用以列出进程中运行的所有 pthreads,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3475750/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com