views:

118

answers:

2

I have program that runs fast enough. I want to see the number of threads created by the program.

ldd test

shows use of library pthread. but how to find out number of threads created by the program. I only have command line access to the PC on which the program is run. The platform is linux.

+3  A: 

Perhaps using strace and catch the calls to clone?

# strace -f -e trace=clone test

It should give an indication of the processes created by test.

pau.estalella
strace not present on the system. may be i can copy a 64-bit version of strace along with the required shared libraries to try this
iamrohitbanga
strace is an extremely useful utility that traces the system calls made by an application. should be easy to install. I edited the answer to reflect a more specific way to catch calls to clone()
pau.estalella
This is the best solution. As this is a non-production machine, you can install strace. Strace is shipped with your distribution.
MarkR
+1  A: 

Using LD_PRELOAD, you should be able to wrap pthread_create sufficiently enough to log somewhere each time it is entered. That method is flawed, however, because it could introduce (or expose) races in your program that would not otherwise occur, possibly resulting in more or fewer threads being created.

Is just keeping track of this within the program (i.e. if a debug build) not an option?

Tim Post
what if the executable is closed source?
iamrohitbanga
or a library like mpi is creating threads for its implementation, which is what i am trying to use. of course, mpi source code can be studied but i wanted to know for the general case.
iamrohitbanga