sd_event_add_child, sd_event_source_get_child_pid — Add a child state change event source to an event loop
#include <systemd/sd-bus.h>
| int sd_event_add_child( | sd_event *event, | 
| sd_event_source **source, | |
| pid_t pid, | |
| int options, | |
| sd_event_child_handler_t handler, | |
| void *userdata ); | 
| typedef int (*sd_event_child_handler_t)( | sd_event_source *s, | 
| const siginfo_t *si, | |
| void *userdata ); | 
| int sd_event_source_get_child_pid( | sd_event_source *source, | 
| pid_t *pid ); | 
sd_event_add_child() adds a new child
    state change event source to an event loop object. The event loop
    is specified in event, the event source is
    returned in the source parameter. The
    pid parameter specifies the process to
    watch. The handler must reference a
    function to call when the process changes state. The handler
    function will be passed the userdata
    pointer, which may be chosen freely by the caller. The handler
    also receives a pointer to a const
    siginfo_t structure containing the information about
    the event. The options parameter determines
    which state changes will be watched for. It must contain an OR-ed
    mask of WEXITED (watch for the child
    terminating), WSTOPPED (watch for the child
    being stopped by a signal), and WCONTINUED
    (watch for the child being resumed by a signal). See
    waitid(2)
    for further information.
Only a single handler may be installed for a specific
    child. The handler is enabled
    for a single event (SD_EVENT_ONESHOT),
    but this may be
    changed with
    sd_event_source_set_enabled(3).
    If the handler function returns a negative error code, it will be
    disabled after the invocation, even if
    SD_EVENT_ON mode is set.
    
sd_event_source_get_child_pid()
    retrieves the configured pid of a child
    state change event source created previously with
    sd_event_add_child(). It takes the event
    source object as the source parameter and a
    pointer to pid_t to return the result in.
    
On success, these functions return 0 or a positive integer. On failure, they return a negative errno-style error code.
Returned errors may indicate the following problems:
-ENOMEM¶Not enough memory to allocate an object.
-EINVAL¶An invalid argument has been passed. This includes
        specifying an empty mask in options or a mask
        which contains values different than a combination of
        WEXITED, WSTOPPED, and
        WCONTINUED.
        
-EBUSY¶An handler is already installed for this child.
-ESTALE¶The event loop is already terminated.
-ECHILD¶The event loop has been created in a different process.
sd_event_add_child() and the other functions
    described here are available as a shared library, which can be
    compiled and linked to with the
    libsystemd pkg-config(1)
    file.