<?xml version='1.0'?>
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="sd_event_add_child" xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>sd_event_add_child</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_event_add_child</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_event_add_child</refname>
    <refname>sd_event_add_child_pidfd</refname>
    <refname>sd_event_source_get_child_pid</refname>
    <refname>sd_event_source_get_child_pidfd</refname>
    <refname>sd_event_source_get_child_pidfd_own</refname>
    <refname>sd_event_source_set_child_pidfd_own</refname>
    <refname>sd_event_source_get_child_process_own</refname>
    <refname>sd_event_source_set_child_process_own</refname>
    <refname>sd_event_source_send_child_signal</refname>
    <refname>sd_event_child_handler_t</refname>

    <refpurpose>Add a child process state change event source to an event loop</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include &lt;systemd/sd-event.h&gt;</funcsynopsisinfo>

      <funcsynopsisinfo><token>typedef</token> struct sd_event_source sd_event_source;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>typedef int (*<function>sd_event_child_handler_t</function>)</funcdef>
        <paramdef>sd_event_source *<parameter>s</parameter></paramdef>
        <paramdef>const siginfo_t *<parameter>si</parameter></paramdef>
        <paramdef>void *<parameter>userdata</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_add_child</function></funcdef>
        <paramdef>sd_event *<parameter>event</parameter></paramdef>
        <paramdef>sd_event_source **<parameter>source</parameter></paramdef>
        <paramdef>pid_t <parameter>pid</parameter></paramdef>
        <paramdef>int <parameter>options</parameter></paramdef>
        <paramdef>sd_event_child_handler_t <parameter>handler</parameter></paramdef>
        <paramdef>void *<parameter>userdata</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_add_child_pidfd</function></funcdef>
        <paramdef>sd_event *<parameter>event</parameter></paramdef>
        <paramdef>sd_event_source **<parameter>source</parameter></paramdef>
        <paramdef>int <parameter>pidfd</parameter></paramdef>
        <paramdef>int <parameter>options</parameter></paramdef>
        <paramdef>sd_event_child_handler_t <parameter>handler</parameter></paramdef>
        <paramdef>void *<parameter>userdata</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_get_child_pid</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
        <paramdef>pid_t *<parameter>pid</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_get_child_pidfd</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_get_child_pidfd_own</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_set_child_pidfd_own</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
        <paramdef>int <parameter>own</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_get_child_process_own</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_set_child_process_own</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
        <paramdef>int <parameter>own</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_event_source_send_child_signal</function></funcdef>
        <paramdef>sd_event_source *<parameter>source</parameter></paramdef>
        <paramdef>int <parameter>sig</parameter></paramdef>
        <paramdef>const siginfo_t *<parameter>info</parameter></paramdef>
        <paramdef>unsigned <parameter>flags</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_event_add_child()</function> adds a new child process state change event source to an
    event loop. The event loop object is specified in the <parameter>event</parameter> parameter, the event
    source object is returned in the <parameter>source</parameter> parameter. The <parameter>pid</parameter>
    parameter specifies the PID of the process to watch, which must be a direct child process of the invoking
    process. The <parameter>handler</parameter> must reference a function to call when the process changes
    state. The handler function will be passed the <parameter>userdata</parameter> pointer, which may be
    chosen freely by the caller. The handler also receives a pointer to a <structname>siginfo_t</structname>
    structure containing information about the child process event. The <parameter>options</parameter>
    parameter determines which state changes will be watched for. It must contain an OR-ed mask of
    <constant>WEXITED</constant> (watch for the child process terminating), <constant>WSTOPPED</constant>
    (watch for the child process being stopped by a signal), and <constant>WCONTINUED</constant> (watch for
    the child process being resumed by a signal). See <citerefentry
    project='man-pages'><refentrytitle>waitid</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
    further information.</para>

    <para>Only a single handler may be installed for a specific
    child process. The handler is enabled for a single event
    (<constant>SD_EVENT_ONESHOT</constant>), but this may be changed
    with
    <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
    If the handler function returns a negative error code, it will be
    disabled after the invocation, even if the
    <constant>SD_EVENT_ON</constant> mode was requested before.
    </para>

    <para>To destroy an event source object use
    <citerefentry><refentrytitle>sd_event_source_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
    but note that the event source is only removed from the event loop
    when all references to the event source are dropped. To make sure
    an event source does not fire anymore, even when there's still a
    reference to it kept, consider setting the event source to
    <constant>SD_EVENT_OFF</constant> with
    <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>

    <para>The <constant>SIGCHLD</constant> signal must be blocked in all threads before this function is
    called (using <citerefentry
    project='man-pages'><refentrytitle>sigprocmask</refentrytitle><manvolnum>2</manvolnum></citerefentry> or
    <citerefentry
    project='man-pages'><refentrytitle>pthread_sigmask</refentrytitle><manvolnum>3</manvolnum></citerefentry>).</para>

    <para>If the second parameter of <function>sd_event_add_child()</function> is passed as
    <constant>NULL</constant> no reference to the event source object is returned. In this case the event
    source is considered "floating", and will be destroyed implicitly when the event loop itself is
    destroyed.</para>

    <para>Note that the <parameter>handler</parameter> function is
    invoked at a time where the child process is not reaped yet (and
    thus still is exposed as a zombie process by the kernel). However,
    the child will be reaped automatically after the function
    returns. Child processes for which no child process state change
    event sources are installed will not be reaped by the event loop
    implementation.</para>

    <para>If the <parameter>handler</parameter> parameter to <function>sd_event_add_child()</function> is
    <constant>NULL</constant>, and the event source fires, this will be considered a request to exit the
    event loop. In this case, the <parameter>userdata</parameter> parameter, cast to an integer, is passed as
    the exit code parameter to
    <citerefentry><refentrytitle>sd_event_exit</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>

    <para>If both a child process state change event source and a
    <constant>SIGCHLD</constant> signal event source is installed in
    the same event loop, the configured event source priorities decide
    which event source is dispatched first. If the signal handler is
    processed first, it should leave the child processes for which
    child process state change event sources are installed unreaped.</para>

    <para><function>sd_event_add_child_pidfd()</function> is similar to
    <function>sd_event_add_child()</function> but takes a file descriptor referencing the process ("pidfd")
    instead of the numeric PID. A suitable file descriptor may be acquired via <citerefentry
    project='man-pages'><refentrytitle>pidfd_open</refentrytitle><manvolnum>2</manvolnum></citerefentry> and
    related calls. The passed file descriptor is not closed when the event source is freed again, unless
    <function>sd_event_source_set_child_pidfd_own()</function> is used to turn this behaviour on. Note that
    regardless which of <function>sd_event_add_child()</function> and
    <function>sd_event_add_child_pidfd()</function> is used for allocating an event source, the watched
    process has to be a direct child process of the invoking process. Also in both cases
    <constant>SIGCHLD</constant> has to be blocked in the invoking process.</para>

    <para><function>sd_event_source_get_child_pid()</function>
    retrieves the configured PID of a child process state change event
    source created previously with
    <function>sd_event_add_child()</function>. It takes the event
    source object as the <parameter>source</parameter> parameter and a
    pointer to a <type>pid_t</type> variable to return the process ID
    in.
    </para>

    <para><function>sd_event_source_get_child_pidfd()</function> retrieves the file descriptor referencing
    the watched process ("pidfd") if this functionality is available. On kernels that support the concept the
    event loop will make use of pidfds to watch child processes, regardless if the individual event sources
    are allocated via <function>sd_event_add_child()</function> or
    <function>sd_event_add_child_pidfd()</function>. If the latter call was used to allocate the event
    source, this function returns the file descriptor used for allocation. On kernels that do not support the
    pidfd concept this function will fail with <constant>EOPNOTSUPP</constant>. This call takes the event
    source object as the <parameter>source</parameter> parameter and returns the numeric file descriptor.
    </para>

    <para><function>sd_event_source_get_child_pidfd_own()</function> may be used to query whether the pidfd
    the event source encapsulates shall be closed when the event source is freed. This function returns zero
    if the pidfd shall be left open, and positive if it shall be closed automatically. By default this
    setting defaults to on if the event source was allocated via <function>sd_event_add_child()</function>
    and off if it was allocated via <function>sd_event_add_child_pidfd()</function>. The
    <function>sd_event_source_set_child_pidfd_own()</function> function may be used to change the setting and
    takes a boolean parameter with the new setting.</para>

    <para><function>sd_event_source_get_child_process_own()</function> may be used to query whether the
    process the event source watches shall be killed (with <constant>SIGKILL</constant>) and reaped when the
    event source is freed. This function returns zero if the process shell be left running, and positive if
    it shall be killed and reaped automatically. By default this setting defaults to off. The
    <function>sd_event_source_set_child_process_own()</function> function may be used to change the setting
    and takes a boolean parameter with the new setting. Note that currently if the calling process is
    terminated abnormally the watched process might survive even thought the event source ceases to
    exist. This behaviour might change eventually.</para>

    <para><function>sd_event_source_send_child_signal()</function> may be used to send a UNIX signal to the
    watched process. If the pidfd concept is supported in the kernel, this is implemented via <citerefentry
    project='man-pages'><refentrytitle>pidfd_send_signal</refentrytitle><manvolnum>2</manvolnum></citerefentry>
    and otherwise via <citerefentry
    project='man-pages'><refentrytitle>rt_sigqueueinfo</refentrytitle><manvolnum>2</manvolnum></citerefentry>
    (or via <citerefentry
    project='man-pages'><refentrytitle>kill</refentrytitle><manvolnum>2</manvolnum></citerefentry> in case
    <parameter>info</parameter> is <constant>NULL</constant>). The specified parameters match those of these
    underlying system calls, except that the <parameter>info</parameter> is never modified (and is thus
    declared constant). Like for the underlying system calls, the <parameter>flags</parameter> parameter
    currently must be zero.</para>
  </refsect1>

  <refsect1>
    <title>Return Value</title>

    <para>On success, these functions return 0 or a positive
    integer. On failure, they return a negative errno-style error
    code.</para>

    <refsect2>
      <title>Errors</title>

      <para>Returned errors may indicate the following problems:</para>

      <variablelist>
        <varlistentry>
          <term><constant>-ENOMEM</constant></term>

          <listitem><para>Not enough memory to allocate an object.</para></listitem>
        </varlistentry>

        <varlistentry>
          <term><constant>-EINVAL</constant></term>

          <listitem><para>An invalid argument has been passed. This includes
          specifying an empty mask in <parameter>options</parameter> or a mask
          which contains values different than a combination of
          <constant>WEXITED</constant>, <constant>WSTOPPED</constant>, and
          <constant>WCONTINUED</constant>.
          </para></listitem>

        </varlistentry>

        <varlistentry>
          <term><constant>-EBUSY</constant></term>

          <listitem><para>A handler is already installed for this child process, or
          <constant>SIGCHLD</constant> is not blocked.</para></listitem>

        </varlistentry>

        <varlistentry>
          <term><constant>-ESTALE</constant></term>

          <listitem><para>The event loop is already terminated.</para></listitem>

        </varlistentry>

        <varlistentry>
          <term><constant>-ECHILD</constant></term>

          <listitem><para>The event loop has been created in a different process.</para></listitem>

        </varlistentry>

        <varlistentry>
          <term><constant>-EDOM</constant></term>

          <listitem><para>The passed event source is not a child process event source.</para></listitem>
        </varlistentry>

        <varlistentry>
          <term><constant>-EOPNOTSUPP</constant></term>

          <listitem><para>A pidfd was requested but the kernel does not support this concept.</para></listitem>
        </varlistentry>

      </variablelist>
    </refsect2>
  </refsect1>

  <xi:include href="libsystemd-pkgconfig.xml" />

  <refsect1>
    <title>See Also</title>

    <para>
      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_now</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_io</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_time</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_inotify</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_add_defer</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_source_set_enabled</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_source_set_priority</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_source_set_userdata</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_source_set_description</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_event_source_set_floating</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>waitid</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>sigprocmask</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>pthread_sigmask</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>pidfd_open</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>pidfd_send_signal</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>rt_sigqueueinfo</refentrytitle><manvolnum>2</manvolnum></citerefentry>,
      <citerefentry project='man-pages'><refentrytitle>kill</refentrytitle><manvolnum>2</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
