sd_pid_get_session, sd_pid_get_unit, sd_pid_get_user_unit, sd_pid_get_owner_uid, sd_pid_get_machine_name — Determine session, service, owner of a session or container/VM 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_user_unit( | pid_t pid, | 
| char** unit ); | 
| int sd_pid_get_owner_uid( | pid_t pid, | 
| uid_t* uid ); | 
| int sd_pid_get_machine_name( | pid_t pid, | 
| char** name ); | 
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 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
                all processes are part of a system unit/service
                (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 sd_pid_get_user_unit() for
                that.) The returned string needs to be freed with the
                libc
                free(3)
                call after use.
sd_pid_get_user_unit() 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
                sd_pid_get_unit() but applies to
                user units instead of system units.
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.
sd_pid_machine_name() 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
                free(3)
                call after use.
If the pid parameter 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_unit(),
                sd_pid_get_user_unit(),
                sd_pid_get_owner_uid() and
                sd_pid_get_machine_name()
                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).