diff --git a/man/sd_pid_get_session.xml b/man/sd_pid_get_session.xml
index 511fcf3ede..d2b64195a6 100644
--- a/man/sd_pid_get_session.xml
+++ b/man/sd_pid_get_session.xml
@@ -45,6 +45,7 @@
sd_pid_get_session
sd_pid_get_unit
+ sd_pid_get_user_unit
sd_pid_get_owner_uid
Determine session, service or owner of a session of a specific PID
@@ -65,6 +66,12 @@
char** unit
+
+ int sd_pid_get_user_unit
+ pid_t pid
+ char** unit
+
+
int sd_pid_get_owner_uid
pid_t pid
@@ -91,18 +98,28 @@
call after use.
sd_pid_get_unit() may be
- used to determine the systemd unit (i.e. system
+ used to determine the systemd system 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
+ 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 unit/system
- service this function will fail. The returned string
- needs to be freed with the libc
+ 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
free3
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
@@ -131,7 +148,8 @@
Notes
The sd_pid_get_session(),
- sd_pid_get_pid(), and
+ sd_pid_get_unit(),
+ sd_pid_get_user_unit(), and
sd_pid_get_owner_uid() interfaces
are available as shared library, which can be compiled
and linked to with the
diff --git a/src/login/libsystemd-login.sym b/src/login/libsystemd-login.sym
index ce2304a1ba..9048de86a9 100644
--- a/src/login/libsystemd-login.sym
+++ b/src/login/libsystemd-login.sym
@@ -64,3 +64,8 @@ global:
sd_login_monitor_get_events;
sd_login_monitor_get_timeout;
} LIBSYSTEMD_LOGIN_198;
+
+LIBSYSTEMD_LOGIN_202 {
+global:
+ sd_pid_get_user_unit;
+} LIBSYSTEMD_LOGIN_201;
diff --git a/src/login/sd-login.c b/src/login/sd-login.c
index f433e3e80b..4c918f2105 100644
--- a/src/login/sd-login.c
+++ b/src/login/sd-login.c
@@ -84,6 +84,17 @@ _public_ int sd_pid_get_unit(pid_t pid, char **unit) {
return cg_pid_get_unit(pid, unit);
}
+_public_ int sd_pid_get_user_unit(pid_t pid, char **unit) {
+
+ if (pid < 0)
+ return -EINVAL;
+
+ if (!unit)
+ return -EINVAL;
+
+ return cg_pid_get_user_unit(pid, unit);
+}
+
_public_ int sd_pid_get_owner_uid(pid_t pid, uid_t *uid) {
int r;
char *root, *cgroup, *p, *cc;
diff --git a/src/systemd/sd-login.h b/src/systemd/sd-login.h
index d05424dbf3..11282b7611 100644
--- a/src/systemd/sd-login.h
+++ b/src/systemd/sd-login.h
@@ -62,10 +62,15 @@ int sd_pid_get_session(pid_t pid, char **session);
* return an error for system processes. */
int sd_pid_get_owner_uid(pid_t pid, uid_t *uid);
-/* Get systemd unit (i.e. service) name from PID. This will return an
- * error for non-service processes. */
+/* Get systemd unit (i.e. service) name from PID, for system
+ * services. This will return an error for non-service processes. */
int sd_pid_get_unit(pid_t, char **unit);
+/* Get systemd unit (i.e. service) name from PID, for user
+ * services. This will return an error for non-user-service
+ * processes. */
+int sd_pid_get_user_unit(pid_t, char **unit);
+
/* Get state from uid. Possible states: offline, lingering, online, active, closing */
int sd_uid_get_state(uid_t uid, char**state);