]> granicus.if.org Git - procps-ng/commitdiff
ps: possibility to display machine name for a process
authorLukas Nykryn <lnykryn@redhat.com>
Mon, 22 Apr 2013 10:33:31 +0000 (12:33 +0200)
committerLukas Nykryn <lnykryn@redhat.com>
Wed, 24 Apr 2013 07:24:44 +0000 (09:24 +0200)
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
ps/output.c
ps/ps.1

index ea75f01def4806fed8fa2dc162c239b4dc737e97..17e35d1b6e792ddaac5ba082d03164bf30f7be44 100644 (file)
@@ -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
index 012f5b6938cb14ca77a27784abeea00f743b0efe..771d6ffcc9a6d2f240a33ae31ccf07443b60bcfe 100644 (file)
@@ -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 7d2ce73fe093827f702407a10931323195d5353f..30718a15dc8dd537cf1db00a68ad3cd219946e37 100644 (file)
--- 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}