proc lwpsinfo_t Structure
            
         Several proc probes have arguments of type lwpsinfo_t. The definition of the lwpsinfo_t structure as available to DTrace consumers is as follows:
               
typedef struct lwpsinfo {
        int pr_flag;              /* flags; see below */
        id_t pr_lwpid;            /* LWP id */
        uintptr_t pr_addr;        /* internal address of thread */
        uintptr_t pr_wchan;       /* wait addr for sleeping thread */
        char pr_stype;            /* synchronization event type */
        char pr_state;            /* numeric thread state */
        char pr_sname;            /* printable character for pr_state */
        char pr_nice;             /* nice for cpu usage */
        short pr_syscall;         /* system call number (if in syscall) */
        int pr_pri;               /* priority, high value = high priority */
        char pr_clname[PRCLSZ];   /* scheduling class name */
        processorid_t pr_onpro;   /* processor which last ran this thread */
        processorid_t pr_bindpro; /* processor to which thread is bound */
        psetid_t pr_bindpset;     /* processor set to which thread is bound */
} lwpsinfo_t;The pr_flag field is a bit-mask holding flags describing the process. These flags and their meanings are described in Table 11-25.
               
Table 11-25 proc pr_flag Values
                  
| Flags | Descriptions | 
|---|---|
| 
 | The process is a system process. | 
| 
 | The process is the parent of a  | 
| 
 | The process has its inherit-on-fork mode set. | 
| 
 | The process has its run-on-last-close mode set. | 
| 
 | The process has its kill-on-last-close mode set. | 
| 
 | The process has its asynchronous-stop mode set. | 
| 
 | The process has microstate accounting enabled. | 
| 
 | The process microstate accounting is inherited on fork. | 
| 
 | The process has its breakpoint adjustment mode set. | 
| 
 | The process has its  | 
| 
 | The thread is an LWP that is stopped. | 
| 
 | The thread is an LWP stopped on an event of interest. | 
| 
 | The thread is an LWP that has a stop directive in effect. | 
| 
 | The thread is an LWP that has a single-step directive in effect. | 
| 
 | The thread is an LWP in an interruptible sleep within a system call. | 
| 
 | The thread is a detached LWP. See the  | 
| 
 | The thread is a daemon LWP. See the  | 
| 
 | The thread is the agent LWP for the process. | 
| 
 | The thread is the idle thread for a CPU. Idle threads only run on a CPU when the run queues for the CPU are empty. | 
The pr_addr field is the address of a private, in-kernel data structure representing the thread. While the data structure is private, the pr_addr field may be used as a token unique to a thread for the thread's lifetime.
               
The pr_wchan field is set when the thread is sleeping on a synchronization object. The meaning of the pr_wchan field is private to the kernel implementation, but the field may be used as a token unique to the synchronization object.
               
The pr_stype field is set when the thread is sleeping on a synchronization object. The following table describes the possible values for the pr_stype field.
               
Table 11-26 proc pr_stype Values
                  
| Value | Description | 
|---|---|
| 
 | Kernel mutex synchronization object. Used to serialize access to shared data regions in the kernel. For more information about kernel mutex synchronization objects, see lockstat Stability and the  | 
| 
 | Kernel readers/writer synchronization object. Used to synchronize access to shared objects in the kernel that can allow multiple concurrent readers or a single writer. For more information about kernel readers/writer synchronization objects, see lockstat Stability and the  | 
| 
 | Condition variable synchronization object. A condition variable is designed to wait indefinitely until some condition becomes true. Condition variables are typically used to synchronize for reasons other than access to a shared data region, and are the mechanism generally used when a process performs a program-directed indefinite wait. For example, blocking in  | 
| 
 | Semaphore synchronization object. A general-purpose synchronization object that – like condition variable objects – does not track a notion of ownership. Because ownership is required to implement priority inheritance in the Oracle Solaris kernel, the lack of ownership inherent in semaphore objects inhibits their widespread use. See the  | 
| 
 | A user-level synchronization object. All blocking on user-level synchronization objects is handled with  | 
| 
 | A user-level synchronization object that implements priority inheritance. Some user-level synchronization objects that track ownership additionally allow for priority inheritance. For example, mutex objects created with  | 
| 
 | A shuttle synchronization object. Shuttle objects are used to implement doors. See  | 
The pr_state field is set to one of the values in Table 11-27. The pr_sname field is set to a corresponding character shown in parentheses in the same table.
               
Table 11-27 proc pr_state Values
                  
| Value | Description | 
|---|---|
| 
 | The thread is sleeping. The  | 
| 
 | The thread is runnable, but is not currently running. The  | 
| 
 | The thread is a zombie LWP. | 
| 
 | The thread is stopped, either due to an explicit  | 
| 
 | The thread is an intermediate state during process creation. | 
| 
 | The thread is running on a CPU. The  | 
| 
 | The thread is waiting on wait queue. The  |