2011-10-27 15 views
3

如果我搜索计算应用程序的线程数,所有的答案都涉及外部程序,如top。我想要统计应用程序本身内的线程。如何计算正在运行的线程数(pthreads)?

我不能在线程创建点添加代码,因为它发生在一个不可变的库中。我不能读/proc

这是一个在几个不同的Unices上运行的C/pthreads程序。

+0

“man ps”,看看'线程'。例如“ps -TF -p $ pid”,如果你需要远程控制,你可以使用via ssh运行。 – bestsss

+0

这必须由我的应用程序完成,而不是通过调用另一个应用程序。 – spraff

+0

Pthreads没有用于计算线程的API,它甚至不保证获得多个内核线程。你可以“追踪(2)”你的过程,但这只是你用来调试的黑客。 – rlibby

回答

1

如果您无法读取/proc你有麻烦了一点,除非你的程序与其他程序读取/proc

如果你不想读的,因为便携关注的/ proc沟通,你可以使用一个抽象的图书馆,如libproc确实

+0

感谢libproc的提示,但它在这个锁定的环境中不起作用。引入一个新的库是一个禁忌。 – spraff

-1

使用top -H。但是很可能,如果你不能读取proc,top将无法工作。如果是这样的话,就没有简单的方法,这取决于你的具体系统。

0

你可以为pthread_create编写一个小包装器,该包装器会在链接到不可变库之后对创建的线程进行计数并链接到该包装器。

+1

但是库不会调用包装...? – spraff

+0

库调用pthread_create 。你可以在链接时提供pthread_create实现,或者在链接时使用,或者使用dmalloc和朋友已知的LD_PRELOAD技巧。 – thiton

+0

可爱的技巧,但这里不允许。 – spraff

相关问题