the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. systemd is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License <
refentry id="sd_pid_get_session" conditional='HAVE_PAM'>
<
title>sd_pid_get_session</
title>
<
productname>systemd</
productname>
<
contrib>Developer</
contrib>
<
firstname>Lennart</
firstname>
<
surname>Poettering</
surname>
<
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>
<
refpurpose>Determine session, service, owner of a
<
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>
<
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. The returned string
needs to be freed with the libc
<
citerefentry><
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 not
(
e.g. user processes, or kernel threads). For
processes not being part of a systemd system unit this
function will fail. (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
<
citerefentry><
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
<
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
<
citerefentry><
refentrytitle>free</
refentrytitle><
manvolnum>3</
manvolnum></
citerefentry>
<
para><
function>sd_pid_get_slice()</
function> may be
used to determine the slice unit the process is a
<
citerefentry><
refentrytitle>
systemd.slice</
refentrytitle><
manvolnum>5</
manvolnum></
citerefentry>
for details about slices. The returned string needs to
<
citerefentry><
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 calling 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 code.</
para>
<
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> and
<
function>sd_pid_get_slice()</
function> interfaces are
available as shared library, which can be compiled and
<
constant>libsystemd-login</
constant> <
citerefentry><
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>