如何计算运行线程(pthreads)的数量?

4
如果我搜索计算应用程序的线程数,所有答案都涉及像top这样的外部程序。我想在应用程序内部计算线程数。
我无法在线程创建时添加代码,因为它发生在不可变库内部。
我无法读取/proc。
这是在几个不同的Unix上运行的C/pthreads程序。

输入命令"man ps"并查看'thread'。例如,你可以通过ssh运行"ps -TF -p $pid"来进行远程控制。 - bestsss
这必须由我的应用程序完成,而不是通过调用另一个应用程序。 - spraff
Pthreads没有用于计算线程数量的API,它甚至不能保证您获得多个内核线程。您可以使用ptrace(2)跟踪您的进程,但这只是一种调试时才会使用的hack方法。 - rlibby
“完全透明”?我不相信。这意味着没有关键部分,没有gettid... - spraff
该死,这正是我不想要的 :-( - spraff
显示剩余3条评论
3个回答

1
如果你无法读取/proc,那么你可能会遇到些麻烦,除非你的程序与另一个读取/proc的程序通信。
如果由于可移植性问题不想读取/proc,则可以使用一些抽象库来处理,例如libproc

感谢提供libproc提示,但在这个受限环境中它不起作用。引入新库是不被允许的。 - spraff

0
你可以编写一个小的包装器来计算创建的线程数,并在链接到不可变库之后链接到该包装器。

1
但是库不会调用包装器...? - spraff
该库调用pthread_create。您可以在链接期间或使用dmalloc和其他工具已知的LD_PRELOAD技巧提供pthread_create实现。 - thiton
@spraff,如果你链接自己的库,它将被调用。 - bestsss

-1

使用 top -H 命令。但是如果您无法读取 proc 目录,那么 top 命令也无法工作。如果是这种情况,就没有简单的方法了,这将取决于您的特定系统。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接