<
email>lennart@poettering.net</
email>
<
refentrytitle>sd_pid_get_session</
refentrytitle>
<
refname>sd_pid_get_session</
refname>
<
refname>sd_pid_get_unit</
refname>
<
refname>sd_pid_get_user_unit</
refname>
<
refname>sd_pid_get_owner_uid</
refname>
<
refname>sd_pid_get_machine_name</
refname>
<
refname>sd_pid_get_slice</
refname>
<
refname>sd_peer_get_session</
refname>
<
refname>sd_peer_get_unit</
refname>
<
refname>sd_peer_get_user_unit</
refname>
<
refname>sd_peer_get_owner_uid</
refname>
<
refname>sd_peer_get_machine_name</
refname>
<
refname>sd_peer_get_slice</
refname>
<
refpurpose>Determine session, service, owner of a
PID or socket peer</
refpurpose>
<
funcdef>int <
function>sd_pid_get_session</
function></
funcdef>
<
paramdef>pid_t <
parameter>pid</
parameter></
paramdef>
<
paramdef>char **<
parameter>session</
parameter></
paramdef>
<
funcdef>int <
function>sd_pid_get_unit</
function></
funcdef>
<
paramdef>pid_t <
parameter>pid</
parameter></
paramdef>
<
paramdef>char **<
parameter>unit</
parameter></
paramdef>
<
funcdef>int <
function>sd_pid_get_user_unit</
function></
funcdef>
<
paramdef>pid_t <
parameter>pid</
parameter></
paramdef>
<
paramdef>char **<
parameter>unit</
parameter></
paramdef>
<
funcdef>int <
function>sd_pid_get_owner_uid</
function></
funcdef>
<
paramdef>pid_t <
parameter>pid</
parameter></
paramdef>
<
paramdef>uid_t *<
parameter>uid</
parameter></
paramdef>
<
funcdef>int <
function>sd_pid_get_machine_name</
function></
funcdef>
<
paramdef>pid_t <
parameter>pid</
parameter></
paramdef>
<
paramdef>char **<
parameter>name</
parameter></
paramdef>
<
funcdef>int <
function>sd_pid_get_slice</
function></
funcdef>
<
paramdef>pid_t <
parameter>pid</
parameter></
paramdef>
<
paramdef>char **<
parameter>slice</
parameter></
paramdef>
<
funcdef>int <
function>sd_peer_get_session</
function></
funcdef>
<
paramdef>int <
parameter>fd</
parameter></
paramdef>
<
paramdef>char **<
parameter>session</
parameter></
paramdef>
<
funcdef>int <
function>sd_peer_get_unit</
function></
funcdef>
<
paramdef>int <
parameter>fd</
parameter></
paramdef>
<
paramdef>char **<
parameter>unit</
parameter></
paramdef>
<
funcdef>int <
function>sd_peer_get_user_unit</
function></
funcdef>
<
paramdef>int <
parameter>fd</
parameter></
paramdef>
<
paramdef>char **<
parameter>unit</
parameter></
paramdef>
<
funcdef>int <
function>sd_peer_get_owner_uid</
function></
funcdef>
<
paramdef>int <
parameter>fd</
parameter></
paramdef>
<
paramdef>uid_t *<
parameter>uid</
parameter></
paramdef>
<
funcdef>int <
function>sd_peer_get_machine_name</
function></
funcdef>
<
paramdef>int <
parameter>fd</
parameter></
paramdef>
<
paramdef>char **<
parameter>name</
parameter></
paramdef>
<
funcdef>int <
function>sd_peer_get_slice</
function></
funcdef>
<
paramdef>int <
parameter>fd</
parameter></
paramdef>
<
paramdef>char **<
parameter>slice</
parameter></
paramdef>
<
title>Description</
title>
<
para><
function>sd_pid_get_session()</
function> may be used to
determine the login session identifier of a process identified by
the specified process identifier. The session identifier is a
short string, suitable for usage in file system paths. Note that
not all processes are part of a login session (
e.g. system service
processes, user processes that are shared between multiple
sessions of the same user, or kernel threads). For processes not
being part of a login session this function will fail with
-ENXIO. The returned string needs to be freed with the libc
project='man-pages'><
refentrytitle>free</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>
<
para><
function>sd_pid_get_unit()</
function> may be used to
determine the systemd system unit (
i.e. system service) identifier
of a process identified by the specified PID. The unit name is a
short string, suitable for usage in file system paths. Note that
processes, or kernel threads). For processes not being part of a
systemd system unit this function will fail with -ENXIO (More
specifically: this call will not work for processes that are part
of user units, use <
function>sd_pid_get_user_unit()</
function> for
that.) The returned string needs to be freed with the libc
project='man-pages'><
refentrytitle>free</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>
<
para><
function>sd_pid_get_user_unit()</
function> may be used to
determine the systemd user unit (
i.e. user service) identifier of
a process identified by the specified PID. This is similar to
<
function>sd_pid_get_unit()</
function> but applies to user units
instead of system units.</
para>
<
para><
function>sd_pid_get_owner_uid()</
function> may be used to
determine the Unix user identifier of the owner of the session of
a process identified the specified PID. Note that this function
will succeed for user processes which are shared between multiple
login sessions of the same user, where
<
function>sd_pid_get_session()</
function> will fail. For processes
not being part of a login session and not being a shared process
of a user this function will fail with -ENXIO.</
para>
<
para><
function>sd_pid_get_machine_name()</
function> may be used
to determine the name of the VM or container is a member of. The
machine name is a short string, suitable for usage in file system
paths. The returned string needs to be freed with the libc
project='man-pages'><
refentrytitle>free</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>
call after use. For processes not part of a VM or containers this
function fails with -ENXIO.</
para>
<
para><
function>sd_pid_get_slice()</
function> may be used to
determine the slice unit the process is a member of. See
<
citerefentry><
refentrytitle>
systemd.slice</
refentrytitle><
manvolnum>5</
manvolnum></
citerefentry>
for details about slices. The returned string needs to be freed
<
citerefentry project='man-pages'><
refentrytitle>free</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>
<
para>If the <
varname>pid</
varname> parameter of any of these
functions is passed as 0, the operation is executed for the
<
para>The <
function>sd_peer_get_session()</
function>,
<
function>sd_peer_get_unit()</
function>,
<
function>sd_peer_get_user_unit()</
function>,
<
function>sd_peer_get_owner_uid()</
function>,
<
function>sd_peer_get_machine_name()</
function> and
<
function>sd_peer_get_slice()</
function> calls operate similar to
their PID counterparts, but operate on a connected AF_UNIX socket
and retrieve information about the connected peer process.</
para>
<
title>Return Value</
title>
<
para>On success, these calls return 0 or a positive integer. On
failure, these calls return a negative errno-style error
<
para>Returned errors may indicate the following problems:</
para>
<
term><
constant>-ENXIO</
constant></
term>
<
listitem><
para>Given field is not specified for the described
<
term><
constant>-ESRCH</
constant></
term>
<
listitem><
para>The specified PID does not refer to a running
<
term><
constant>-ENOMEM</
constant></
term>
<
listitem><
para>Memory allocation failed.</
para></
listitem>
<
para>The <
function>sd_pid_get_session()</
function>,
<
function>sd_pid_get_unit()</
function>,
<
function>sd_pid_get_user_unit()</
function>,
<
function>sd_pid_get_owner_uid()</
function>,
<
function>sd_pid_get_machine_name()</
function>,
<
function>sd_pid_get_slice()</
function>,
<
function>sd_peer_get_session()</
function>,
<
function>sd_peer_get_unit()</
function>,
<
function>sd_peer_get_user_unit()</
function>,
<
function>sd_peer_get_owner_uid()</
function>,
<
function>sd_peer_get_machine_name()</
function> and
<
function>sd_peer_get_slice()</
function> interfaces are
available as a shared library, which can be compiled
<
constant>libsystemd</
constant> <
citerefentry project='die-net'><
refentrytitle>pkg-config</
refentrytitle><
manvolnum>1</
manvolnum></
citerefentry>
<
para>Note that the login session identifier as
returned by <
function>sd_pid_get_session()</
function>
is completely unrelated to the process session
identifier as returned by
<
citerefentry><
refentrytitle>getsid</
refentrytitle><
manvolnum>2</
manvolnum></
citerefentry>.</
para>
<
citerefentry><
refentrytitle>systemd</
refentrytitle><
manvolnum>1</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>sd-login</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>sd_session_is_active</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>getsid</
refentrytitle><
manvolnum>2</
manvolnum></
citerefentry>,
<
citerefentry><
refentrytitle>
systemd.slice</
refentrytitle><
manvolnum>5</
manvolnum></
citerefentry>,