sigevent —
    asynchronous event notification
Some operations permit threads to request asynchronous
    notification of events via a struct sigevent
    structure. This structure contains several fields that describe the
    requested notification:
  
    | Type | Member | Description | 
  
    | int | sigev_notify | notification method | 
  
    | int | sigev_signo | signal number | 
  
    | union sigval | sigev_value | signal value | 
  
    | int | sigev_notify_kqueue | kqueue(2)
      file descriptor | 
  
    | unsigned short | sigev_notify_kevent_flags | kevent flags | 
  
    | lwpid_t | sigev_notify_thread_id | LWP ID | 
  
    | void (*)(union sigval) | sigev_notify_function | callback function pointer | 
  
    | pthread_attr_t * | sigev_notify_attributes | callback thread attributes | 
The sigev_notify field specifies the
    notification method used when the event triggers:
  - SIGEV_NONE
- No notification is sent.
- SIGEV_SIGNAL
- The signal sigev_signo is queued as a real-time
      signal to the calling process. The value stored in
      sigev_value will be present in the
      si_value of the siginfo_t
      structure of the queued signal.
- SIGEV_THREAD
- The notification function in sigev_notify_function
      is called in a separate thread context. The thread is created with the
      attributes specified in *sigev_notify_attributes.
      The value stored in sigev_value is passed as the
      sole argument to sigev_notify_function. If
      sigev_notify_attributes is
      NULL, the thread is created with default
      attributes.
- SIGEV_KEVENT
- A new kevent is posted to the kqueue
      sigev_notify_kqueue. The udata
      member of the kevent structure contains the value stored in
      sigev_value. The meaning of other fields in the
      kevent are specific to the type of triggered event.
- SIGEV_THREAD_ID
- The signal sigev_signo is queued to the thread whose
      LWP ID is sigev_notify_thread_id. The value stored
      in sigev_value will be present in the
      si_value of the siginfo_t
      structure of the queued signal.
Note that programs wishing to use
    SIGEV_THREAD notifications must link against the
    POSIX Real-time Library (librt, -lrt).
The struct sigevent type conforms to
    IEEE Std 1003.1-2004 (“POSIX.1”).
The sigevent structure first appeared in
    FreeBSD 3.3.