sd_pid_get_session, sd_pid_get_unit, sd_pid_get_owner_uid — Determine session, service or owner of a session of a specific PID
#include <systemd/sd-login.h>
| int sd_pid_get_session( | pid_t pid, | 
| char** session ); | 
| int sd_pid_get_unit( | pid_t pid, | 
| char** unit ); | 
| int sd_pid_get_owner_uid( | pid_t pid, | 
| uid_t* uid ); | 
sd_pid_get_session() 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
                free(3)
                call after use.
sd_pid_get_unit() may be
                used to determine the systemd unit (i.e. system
                service) identifier of a process identified by the
                specified process identifier. The unit name is a short
                string, suitable for usage in file system paths. Note
                that not all processes are part of a unit/service
                (e.g. user processes, or kernel threads). For
                processes not being part of a systemd unit/system
                service this function will fail. The returned string
                needs to be freed with the libc
                free(3)
                call after use.
sd_pid_get_owner_uid() 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
                sd_pid_get_session() will
                fail. For processes not being part of a login session
                and not being a shared process of a user this function
                will fail.
If the pid paramater of any
                of these functions is passed as 0 the operation is
                executed for the calling process.
On success these calls return 0 or a positive integer. On failure, these calls return a negative errno-style error code.
The sd_pid_get_session(),
                sd_pid_get_pid(), and
                sd_pid_get_owner_uid() interfaces
                are available as shared library, which can be compiled
                and linked to with the
                libsystemd-login
                pkg-config(1)
                file.
Note that the login session identifier as
                returned by sd_pid_get_session()
                is completely unrelated to the process session
                identifier as returned by
                getsid(2).