当前位置: 首页 > 面试题库 >

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

池兴邦
2023-03-14
问题内容

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

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

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


问题答案:

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

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

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

如果从Linux
pthreads获得的有限支持无法实现所需的功能,则另一种策略是发挥动态链接技巧,以将自己的pthread_create日志版本提供给以后可以检查的数据结构。



 类似资料:
  • 问题内容: 我需要一个C / C ++ API,该API允许我列出Linux系统上正在运行的进程,并列出每个进程已打开的文件。 我 不 希望最终直接读取的/ proc /文件系统。 有人能想到一种方法吗? 问题答案: http://procps.sourceforge.net/ http://procps.cvs.sourceforge.net/viewvc/procps/procps/proc/

  • 我正在尝试使用此指令运行docker(在linux vm上)。整个安装过程运行良好,直到安装的第4/5个子点。当运行时,我收到一条消息,如但运行给出。 同样,当用ps-A列出流程时 不显示之前启动的进程。 使用建议的命令 不会改变任何事情。运行返回 有人能提出什么建议吗?

  • 问题内容: 有没有一种方法可以获取实例中所有数据库中所有存储过程中引用的所有列和表?输出应为: 问题答案: 这将得到您想要的列表,但是,如果您在动态SQL中嵌入了此类列引用(并且可能找不到依赖于延迟名称解析的引用),则将无济于事。SQL Server不会解析存储过程的文本以提供DMV输出。 现在尝试使用子句来处理在同一服务器上具有不同归类的数据库的情况。 如果您的数据库处于80兼容模式,那么该语法

  • 问题内容: 在linux下,我可以使用GDB调试当前正在运行的进程吗? 问题答案: 是。使用命令。查看此链接以获取更多信息。打字在GDB控制台提供了以下: 附加到GDB外部的进程或文件。该命令附加到另一个目标,该目标与上一个“ ”命令的类型相同(“ ”将显示目标堆栈)。该命令可以将进程ID,进程名称(带有可选的进程ID作为后缀)或设备文件作为参数。对于进程ID,您必须具有向该进程发送信号的权限,并

  • 问题内容: 如何查看Java程序正在执行的系统?有没有可以在Linux上执行此操作的工具? 问题答案: 使用strace:

  • 本文向大家介绍C#列出当前系统所有正在运行程序的方法,包括了C#列出当前系统所有正在运行程序的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#列出当前系统所有正在运行程序的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的C#程序设计有所帮助。