From 4c1536d5f1a1bdab72b2b751a466c6e3868ed00b Mon Sep 17 00:00:00 2001 From: Lukas Nykryn Date: Mon, 22 Apr 2013 12:33:31 +0200 Subject: [PATCH] ps: possibility to display machine name for a process Library systemd-login offers possibility to display the name of the VM or container which process belongs to. This patch adds output option "sd_machine" which will show machine name or "-" when the name can not be determined. To maintain compatibility with non-systemd systems, procps must be configured with --with-systemd option to enable this option. --- configure.ac | 4 ++-- ps/output.c | 16 ++++++++++++++++ ps/ps.1 | 4 ++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index ea75f01d..17e35d1b 100644 --- a/configure.ac +++ b/configure.ac @@ -269,8 +269,8 @@ AC_ARG_WITH([systemd], [], [with_systemd=no]) if test "x$with_systemd" != xno; then - PKG_CHECK_MODULES([SYSTEMD], [libsystemd-login], [], [ - AC_CHECK_LIB(systemd-login, sd_pid_get_unit, [have_systemd=yes], [have_systemd=no]) + PKG_CHECK_MODULES([SYSTEMD], [libsystemd-login >= 202], [], [ + AC_CHECK_LIB(systemd-login, sd_pid_get_machine_name, [have_systemd=yes], [have_systemd=no]) if test "x$have_systemd" = xno; then AC_MSG_ERROR([systemd support missing/incomplete]) fi diff --git a/ps/output.c b/ps/output.c index 012f5b69..771d6ffc 100644 --- a/ps/output.c +++ b/ps/output.c @@ -1224,7 +1224,22 @@ fail: return 1; } +static int pr_sd_machine(char *restrict const outbuf, const proc_t *restrict const pp){ + int r; + size_t len; + char *machine; + r = sd_pid_get_machine_name(pp->tgid, &machine); + if(r<0) goto fail; + len = snprintf(outbuf, COLWID, "%s", machine); + free(machine); + return len; + +fail: + outbuf[0] = '-'; + outbuf[1] = '\0'; + return 1; +} #endif /****************** FLASK & seLinux security stuff **********************/ // move the bulk of this to libproc sometime @@ -1553,6 +1568,7 @@ static const format_struct format_array[] = { {"scnt", "SCNT", pr_nop, sr_nop, 4, 0, DEC, AN|RIGHT}, /* man page misspelling of scount? */ {"scount", "SC", pr_nop, sr_nop, 4, 0, AIX, AN|RIGHT}, /* scnt==scount, DEC claims both */ #ifdef WITH_SYSTEMD +{"sd_machine","MACHINE", pr_sd_machine, sr_nop, 31, 0, LNX, ET|LEFT}, {"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}, diff --git a/ps/ps.1 b/ps/ps.1 index 7d2ce73f..30718a15 100644 --- a/ps/ps.1 +++ b/ps/ps.1 @@ -1489,6 +1489,10 @@ SCHED_FIFO, SCHED_RR, SCHED_BATCH, SCHED_ISO, and SCHED_IDLE are respectively displayed as 0, 1, 2, 3, 4, and 5. T} +sd_machine MACHINE T{ +displays machine name for processes assigned to VM or container. +T} + sd_ouid OWNER T{ displays the Unix user identifier of the owner of the session of a process. T}