summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Nykryn <lnykryn@redhat.com>2013-04-22 12:56:02 +0200
committerLukas Nykryn <lnykryn@redhat.com>2013-04-24 09:24:44 +0200
commit38e8087d5580d870d5960f75670ab5c4f482d366 (patch)
tree03b7a2722867ae4e274115ce76a12d6c73d57ad2
parent4c1536d5f1a1bdab72b2b751a466c6e3868ed00b (diff)
downloadprocps-ng-38e8087d5580d870d5960f75670ab5c4f482d366.tar.gz
ps: possibility to display systemd user unit for a process
Library systemd-login offers possibility to display name of systemd user unit for specific pid. Note that not all processes are part of a user unit. This patch adds output option "sd_uunit" which will show name of user unit or "-", when process does not belong to any user unit. This is similar to "sd_unit" but applies to user units instead of system units. To maintain compatibility with non-systemd systems, procps must be configured with --with-systemd option to enable this option.
-rw-r--r--ps/output.c19
-rw-r--r--ps/ps.14
2 files changed, 23 insertions, 0 deletions
diff --git a/ps/output.c b/ps/output.c
index 771d6ff..4ccc6c3 100644
--- a/ps/output.c
+++ b/ps/output.c
@@ -1240,6 +1240,24 @@ fail:
outbuf[1] = '\0';
return 1;
}
+
+static int pr_sd_uunit(char *restrict const outbuf, const proc_t *restrict const pp){
+ int r;
+ size_t len;
+ char *unit;
+
+ r = sd_pid_get_user_unit(pp->tgid, &unit);
+ if(r<0) goto fail;
+ len = snprintf(outbuf, COLWID, "%s", unit);
+ free(unit);
+ return len;
+
+fail:
+ outbuf[0] = '-';
+ outbuf[1] = '\0';
+ return 1;
+}
+
#endif
/****************** FLASK & seLinux security stuff **********************/
// move the bulk of this to libproc sometime
@@ -1572,6 +1590,7 @@ static const format_struct format_array[] = {
{"sd_ouid", "OWNER", pr_sd_ouid, sr_nop, 5, 0, LNX, ET|LEFT},
{"sd_session","SESSION", pr_sd_session, sr_nop, 11, 0, LNX, ET|LEFT},
{"sd_unit", "UNIT", pr_sd_unit, sr_nop, 31, 0, LNX, ET|LEFT},
+{"sd_uunit", "UUNIT", pr_sd_uunit, sr_nop, 31, 0, LNX, ET|LEFT},
#endif
{"sess", "SESS", pr_sess, sr_session, 5, 0, XXX, PO|PIDMAX|RIGHT},
{"session", "SESS", pr_sess, sr_session, 5, 0, LNX, PO|PIDMAX|RIGHT},
diff --git a/ps/ps.1 b/ps/ps.1
index 30718a1..df2400f 100644
--- a/ps/ps.1
+++ b/ps/ps.1
@@ -1505,6 +1505,10 @@ sd_unit UNIT T{
displays systemd unit which a process belongs to.
T}
+sd_uunit UUNIT T{
+displays systemd user unit which a process belongs to.
+T}
+
sess SESS T{
session ID or, equivalently, the process ID of the session leader. (alias
.BR session , \ sid ).