new patch on top of recent ps rewrites attached. new patch also
includes rtprio and sched.

On Wed, Nov 18, 2015 at 9:45 PM, enh <[email protected]> wrote:
> another of the fields available in toolbox ps, that someone
> coincidentally asked me how to get just last week.
>
> --
> Elliott Hughes - http://who/enh - http://jessies.org/~enh/
> Android native code/tools questions? Mail me/drop by/add me as a reviewer.



-- 
Elliott Hughes - http://who/enh - http://jessies.org/~enh/
Android native code/tools questions? Mail me/drop by/add me as a reviewer.
From 031493b206600543cb9ec9dda5575ffb41c358e5 Mon Sep 17 00:00:00 2001
From: Elliott Hughes <[email protected]>
Date: Sun, 20 Dec 2015 10:49:13 -0800
Subject: [PATCH] Add ps -o psr,rtprio,sched.

These three are currently available in Android's ps but not in toybox ps.
---
 toys/posix/ps.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/toys/posix/ps.c b/toys/posix/ps.c
index 2c1843b..44d5b57 100644
--- a/toys/posix/ps.c
+++ b/toys/posix/ps.c
@@ -95,14 +95,17 @@ config PS
       PID     Process ID
       PPID    Parent Process ID
       PRI     Priority (higher is faster)
+      PSR     Processor last executed on
       RGID    Real (before sgid) group ID
       RGROUP  Real (before sgid) group name
       RSS     Resident Set Size (memory in use)
+      RTPRIO  Realtime priority
       RUID    Real (before suid) user ID
       RUSER   Real (before suid) user name
       S       Process state:
               R (running) S (sleeping) D (device I/O) T (stopped)  t (traced)
               Z (zombie)  X (deader)   x (dead)       K (wakekill) W (waking)
+      SCHED   Scheduling policy (0=other, 1=fifo, 2=rr, 3=batch, 4=iso, 5=idle)
       STAT    Process state (S) plus:
               < high priority          N low priority L locked memory
               s session leader         + foreground   l multithreaded
@@ -222,10 +225,12 @@ struct typography {
   signed char width, slot;
 
 } static const typos[] = TAGGED_ARRAY(PS,
-  // stat#s: PID, PPID, PRI, NI, ADDR, SZ, RSS, PGID, VSZ, MAJFL, MINFL, PR
+  // stat#s: PID PPID PRI NI ADDR SZ RSS PGID VSZ MAJFL MINFL PR PSR RTPRIO
+  // SCHED
   {"PID", 5, 0}, {"PPID", 5, 1}, {"PRI", 3, 15}, {"NI", 3, 16},
   {"ADDR", 4+sizeof(long), 27}, {"SZ", 5, 20}, {"RSS", 5, 21}, {"PGID", 5, 2},
   {"VSZ", 6, 20}, {"MAJFL", 6, 9}, {"MINFL", 6, 7}, {"PR", 2, 15},
+  {"PSR", 3, 36}, {"RTPRIO", 6, 37}, {"SCH", 3, 38},
 
   // user/group: UID USER RUID RUSER GID GROUP RGID RGROUP
   {"UID", 5, 31}, {"USER", -8, 64|31}, {"RUID", 4, 32}, {"RUSER", -8, 64|32},
@@ -286,8 +291,8 @@ static char *string_field(struct carveup *tb, struct strawberry *field)
   // Default: unsupported (5 "C")
   sprintf(out, "-");
 
-  // stat#s: PID, PPID, PRI, NI, ADDR, SZ, RSS, PGID, VSZ, MAJFL, MINFL, PR
-  if (which <= PS_PR) {
+  // stat#s: PID PPID PRI NI ADDR SZ RSS PGID VSZ MAJFL MINFL PR PSR RTPRIO SCH
+  if (which <= PS_SCH) {
     char *fmt = "%lld";
 
     if (which==PS_PRI) ll = 39-ll;
@@ -295,7 +300,8 @@ static char *string_field(struct carveup *tb, struct strawberry *field)
     else if (which==PS_SZ) ll >>= 12;
     else if (which==PS_RSS) ll <<= 2;
     else if (which==PS_VSZ) ll >>= 10;
-    else if (which==PS_PR) if (ll<-9) fmt="RT";
+    else if (which==PS_PR && ll<-9) fmt="RT";
+    else if (which==PS_RTPRIO && ll == 0) fmt="-";
     sprintf(out, fmt, ll);
 
   // user/group: UID USER RUID RUSER GID GROUP RGID RGROUP
@@ -680,9 +686,11 @@ static char *parse_ko(void *data, char *type, int length)
     for (j = 0; j<2; j++) {
       if (!j) s = typos[i].name;
       // posix requires alternate names for some fields
-      else if (-1==(k = stridx((char []){PS_NI, PS_ELAPSED, PS__CPU, PS_VSZ,
-        PS_USER, 0}, i))) continue;
-      else s = ((char *[]){"NICE", "ETIME", "PCPU", "VSIZE", "UNAME"})[k];
+      else if (-1==(k = stridx((char []){PS_NI, PS_SCH, PS_ELAPSED, PS__CPU,
+        PS_VSZ, PS_USER, 0}, i))) continue;
+      else {
+        s = ((char *[]){"NICE", "SCHED", "ETIME", "PCPU", "VSIZE", "UNAME"})[k];
+      }
 
       if (!strncasecmp(type, s, end-type) && strlen(s)==end-type) break;
     }
-- 
2.6.0.rc2.230.g3dd15c0

_______________________________________________
Toybox mailing list
[email protected]
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to