From Dragonfly BSD
‘s official document:
A user process contains one or more LWP (Light Weight Process) entities. Each entity represents a user thread under that process.
I want to explore the thread model myself. So I write a simple program which launches 2
threads in main
function, and print process ID, LWP
ID and thread id from C++
‘s get_id function:
void output_thread_id(const std::string& prefix)
{
std::stringstream ss;
ss <<"Process ID is " << getpid() <<
", lwp ID is " << lwp_gettid() <<
", " << prefix << std::this_thread::get_id() <<'\n';
std::cout << ss.str();
}
Build and run it:
# ./spawn_threads
Process ID is 16394, lwp ID is 1, main thread ID is 0x8007d00c0
Process ID is 16394, lwp ID is 2, sub thread ID is 0x8007d0240
Process ID is 16394, lwp ID is 3, sub thread ID is 0x8007d03c0
All 3
threads have same process ID, but LWP
ID begins with 1
, and increases contiguously (this is not same as Linux
). By default, top
command will only show processes:
Press ‘H
‘ can display threads’ information (For ps
command, -H
option can be used to show threads):
P.S., the full code is here.
Reference:
How to get the thread number and every thread’s ID of a running process? .