]> granicus.if.org Git - procps-ng/commitdiff
ps: possibility to display slice unit for a process
authorLukas Nykryn <lnykryn@redhat.com>
Wed, 7 Aug 2013 09:57:24 +0000 (11:57 +0200)
committerJaromir Capik <jcapik@redhat.com>
Wed, 16 Oct 2013 13:18:08 +0000 (15:18 +0200)
Library systemd-login offers possibility to display
name of a systemd slice unit for specific pid.

This patch adds output option "slice" which will
show name of systemd slice unit.

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 20bc3ce056b39c1f22f3161310699abb01a1f2c5..f08867cf5f11d88c4ea7ef8128efd53187b2c4f3 100644 (file)
@@ -154,8 +154,8 @@ AC_ARG_WITH([systemd],
   [], [with_systemd=no]
 )
 if test "x$with_systemd" != xno; then
-  PKG_CHECK_MODULES([SYSTEMD], [libsystemd-login >= 202], [], [
-    AC_CHECK_LIB(systemd-login, sd_pid_get_machine_name, [have_systemd=yes], [have_systemd=no])
+  PKG_CHECK_MODULES([SYSTEMD], [libsystemd-login >= 206], [], [
+    AC_CHECK_LIB(systemd-login, sd_pid_get_slice, [have_systemd=yes], [have_systemd=no])
     if test "x$have_systemd" = xno; then
       AC_MSG_ERROR([systemd support missing/incomplete])
     fi
index 2e9056e54b81e29f74feb48c35bba6021bd2f90c..9be334e634dd90b81a126d31c6a6cdc97e20d4af 100644 (file)
@@ -1292,6 +1292,23 @@ fail:
   return 1;
 }
 
+static int pr_sd_slice(char *restrict const outbuf, const proc_t *restrict const pp){
+  int r;
+  size_t len;
+  char *slice;
+
+  r = sd_pid_get_slice(pp->tgid, &slice);
+  if(r<0) goto fail;
+  len = snprintf(outbuf, COLWID, "%s", slice);
+  free(slice);
+  return len;
+
+fail:
+  outbuf[0] = '-';
+  outbuf[1] = '\0';
+  return 1;
+}
+
 #endif
 /************************ Linux namespaces ******************************/
 
@@ -1675,6 +1692,9 @@ static const format_struct format_array[] = {
 {"sigmask",   "BLOCKED", pr_sigmask,  sr_nop,     9,   0,    XXX, TO|SIGNAL}, /*blocked*/
 {"size",      "SIZE",    pr_swapable, sr_swapable, 5,  0,    SCO, PO|RIGHT},
 {"sl",        "SL",      pr_nop,      sr_nop,     3,   0,    XXX, AN|RIGHT},
+#ifdef WITH_SYSTEMD
+{"slice",      "SLICE",  pr_sd_slice, sr_nop,    31,   0,    LNX, ET|LEFT},
+#endif
 {"spid",      "SPID",    pr_tasks,    sr_tasks,   5,   0,    SGI, TO|PIDMAX|RIGHT},
 {"stackp",    "STACKP",  pr_stackp,   sr_start_stack, 8, 0,  LNX, PO|RIGHT}, /*start_stack*/
 {"start",     "STARTED", pr_start,    sr_nop,     8,   0,    XXX, ET|RIGHT},
diff --git a/ps/ps.1 b/ps/ps.1
index 80e5ce8753fdd50ea79297921886b369a0055476..cdb7536be07f05dbf3034efcc21077ed8966962d 100644 (file)
--- a/ps/ps.1
+++ b/ps/ps.1
@@ -1582,6 +1582,10 @@ to dirty all writable pages and then be swapped out.  This number is very
 rough!
 T}
 
+slice  SLICE   T{
+displays slice unit which a process belongs to.
+T}
+
 spid   SPID    T{
 see
 .BR lwp .