signalling remote threads

Julian Elischer julian at elischer.org
Sat Mar 10 00:53:32 UTC 2007


Julian Elischer wrote:
> Martin Blapp wrote:
>>
>> Hi,
>>
>>> There is no portable way to identify threads in another process. 
>>> There is also no guarantee that the tread is even externally visible. 
>>> Take
>>
>> But is it true for FreeBSD that 'ps -Hauxwww' should show all threads
>> for a process with libc_r, libpthreads.so, or libthr.so ?
> 
> no
> 
> libc_r will only have one line in ps even if there are 10,000 threads
> because they are an internal 'figment of the imagination of the process".
> There is NO externally visible sign of them esxcept for the behaviour of 
> the process. (it does a lot of async operations).
> 
> Similarly for libpthread, it will show SOME threads but not as many as 
> there are threads in the process because only threads that are blocked
> for IO in the kernel or are actually running at that instant will
> show up. Threads that are not running or blocked in the kernel
> are, once again just figments of the imagination of the process.

Just to clarify, the threads that will show up in this case are:

(1)threads blocked waiting for something in the kernel (e.g. I/O)
plus
(2)threads ACTUALLY RUNNING ON A CPU
plus
(3)any idle CPU workers for that process (i.e number of cpus - (2))
plus
(4)a worker thread to catch and distribute signals.

Any threads that are runnable but not yet allocated to a CPU worker
or are waiting on some internal event (e.g. a pthread_mutex) will
not show up, as the kernel doesn't know of their existence.

numbers 2 and 3 are actually the same thing.. they are CPU workers
but those in #2 are doing work for an internal thread and those in #3
are waiting to be assigned work (and are thus kind of in the same
category as #1, waiting in the kernel to be woken up by
a signal from within the process, to go get work to do when it
is available.

I don't know if this helps, but...


> If you run a libpthread process with LIBPTHREAD_SCOPE_SYSTEM set to 'yes'.
> then it will switch to 1:1 mode and there will be a kernel thread 
> instantiated for each thread in the process and yes you will see them in 
> ps -H. 
> libthr will always show all the threads because it is basically the
> equivalent and optimised version of libpthread with 
> LIBPTHREAD_SCOPE_SYSTEM set. It only runs in that mode.
> 
> 
>>
>> -- 
>> Martin
> 
> _______________________________________________
> freebsd-threads at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-threads
> To unsubscribe, send any mail to "freebsd-threads-unsubscribe at freebsd.org"



More information about the freebsd-threads mailing list