//config:config FEATURE_PS_WIDE
//config: bool "Enable wide output (-w)"
//config: default y
-//config: depends on PS && !DESKTOP
+//config: depends on (PS || MINIPS) && !DESKTOP
//config: help
//config: Support argument 'w' for wide output.
//config: If given once, 132 chars are printed, and if given more
//config:config FEATURE_PS_LONG
//config: bool "Enable long output (-l)"
//config: default y
-//config: depends on PS && !DESKTOP
+//config: depends on (PS || MINIPS) && !DESKTOP
//config: help
//config: Support argument 'l' for long output.
//config: Adds fields PPID, RSS, START, TIME & TTY
//config:config FEATURE_PS_TIME
//config: bool "Enable -o time and -o etime specifiers"
//config: default y
-//config: depends on PS && DESKTOP
+//config: depends on (PS || MINIPS) && DESKTOP
//config: select PLATFORM_LINUX
//config:
-//config:config FEATURE_PS_ADDITIONAL_COLUMNS
-//config: bool "Enable -o rgroup, -o ruser, -o nice specifiers"
-//config: default y
-//config: depends on PS && DESKTOP
-//config:
//config:config FEATURE_PS_UNUSUAL_SYSTEMS
//config: bool "Support Linux prior to 2.4.0 and non-ELF systems"
//config: default n
//config: help
//config: Include support for measuring HZ on old kernels and non-ELF systems
//config: (if you are on Linux 2.4.0+ and use ELF, you don't need this)
+//config:
+//config:config FEATURE_PS_ADDITIONAL_COLUMNS
+//config: bool "Enable -o rgroup, -o ruser, -o nice specifiers"
+//config: default y
+//config: depends on (PS || MINIPS) && DESKTOP
-//applet:IF_PS(APPLET_NOEXEC(ps, ps, BB_DIR_BIN, BB_SUID_DROP, ps))
+// APPLET_NOEXEC:name main location suid_type help
+//applet:IF_PS( APPLET_NOEXEC(ps, ps, BB_DIR_BIN, BB_SUID_DROP, ps))
+//applet:IF_MINIPS(APPLET_NOEXEC(minips, ps, BB_DIR_BIN, BB_SUID_DROP, ps))
//kbuild:lib-$(CONFIG_PS) += ps.o
+//kbuild:lib-$(CONFIG_MINIPS) += ps.o
//usage:#if ENABLE_DESKTOP
//usage:
#endif
#if ENABLE_FEATURE_PS_TIME
+static void format_time(char *buf, int size, unsigned long tt)
+{
+ unsigned ff;
+
+ /* Used to show "14453:50" if tt is large. Ugly.
+ * procps-ng 3.3.10 uses "[[dd-]hh:]mm:ss" format.
+ * TODO: switch to that?
+ */
+
+ /* Formatting for 5-char TIME column.
+ * NB: "size" is not always 5: ELAPSED is wider (7),
+ * not taking advantage of that (yet?).
+ */
+ ff = tt % 60;
+ tt /= 60;
+ if (tt < 60) {
+ snprintf(buf, size+1, "%2u:%02u", (unsigned)tt, ff);
+ return;
+ }
+ ff = tt % 60;
+ tt /= 60;
+ if (tt < 24) {
+ snprintf(buf, size+1, "%2uh%02u", (unsigned)tt, ff);
+ return;
+ }
+ ff = tt % 24;
+ tt /= 24;
+ if (tt < 100) {
+ snprintf(buf, size+1, "%2ud%02u", (unsigned)tt, ff);
+ return;
+ }
+ snprintf(buf, size+1, "%4lud", tt);
+}
static void func_etime(char *buf, int size, const procps_status_t *ps)
{
/* elapsed time [[dd-]hh:]mm:ss; here only mm:ss */
unsigned long mm;
- unsigned ss;
mm = ps->start_time / get_kernel_HZ();
mm = G.seconds_since_boot - mm;
- ss = mm % 60;
- mm /= 60;
- snprintf(buf, size+1, "%3lu:%02u", mm, ss);
+ format_time(buf, size, mm);
}
static void func_time(char *buf, int size, const procps_status_t *ps)
{
/* cumulative time [[dd-]hh:]mm:ss; here only mm:ss */
unsigned long mm;
- unsigned ss;
mm = (ps->utime + ps->stime) / get_kernel_HZ();
- ss = mm % 60;
- mm /= 60;
- snprintf(buf, size+1, "%3lu:%02u", mm, ss);
+ format_time(buf, size, mm);
}
#endif
// { 5 , "pcpu" ,"%CPU" ,func_pcpu ,PSSCAN_ },
#endif
#if ENABLE_FEATURE_PS_TIME
- { 6 , "time" ,"TIME" ,func_time ,PSSCAN_STIME | PSSCAN_UTIME },
+ { 5 , "time" ,"TIME" ,func_time ,PSSCAN_STIME | PSSCAN_UTIME },
#endif
{ 6 , "tty" ,"TT" ,func_tty ,PSSCAN_TTY },
{ 4 , "vsz" ,"VSZ" ,func_vsz ,PSSCAN_VSZ },
len = out[i].width - len + 1;
if (++i == out_cnt) /* do not pad last field */
break;
- p += sprintf(p, "%*s", len, "");
+ p += sprintf(p, "%*s", len, " "); /* " ", not "", to ensure separation of fields */
}
printf("%.*s\n", terminal_width, buffer);
}
};
INIT_G();
+#if ENABLE_FEATURE_PS_TIME
G.seconds_since_boot = get_uptime();
-#if ENABLE_FEATURE_PS_TIME && (ENABLE_FEATURE_PS_UNUSUAL_SYSTEMS || !defined(__linux__))
+# if ENABLE_FEATURE_PS_UNUSUAL_SYSTEMS || !defined(__linux__)
G.kernel_HZ = bb_clk_tck(); /* this is sysconf(_SC_CLK_TCK) */
+# endif
#endif
// POSIX: