From b2e4c77a02a90972acaa19099d19be9f1dffa3a3 Mon Sep 17 00:00:00 2001 From: stas Date: Sat, 14 Apr 2007 10:16:52 +0000 Subject: - Add new 'a' switch and runtime option that allows 'top' to display process titles extracted from argv vector instead of the real executable names. This is useful when you want to watch applications that set their status information via setproctitle(3). Approved by: alfred MFC after: 2 weeks --- contrib/top/top.X | 8 +++++++- contrib/top/top.c | 21 ++++++++++++++++----- contrib/top/top.h | 5 +++++ 3 files changed, 28 insertions(+), 6 deletions(-) (limited to 'contrib/top') diff --git a/contrib/top/top.X b/contrib/top/top.X index ff1a1d9..304ee91 100644 --- a/contrib/top/top.X +++ b/contrib/top/top.X @@ -10,7 +10,7 @@ top \- display and update information about the top cpu processes .SH SYNOPSIS .B top [ -.B \-bCHIinqStuv +.B \-abCHIinqStuv ] [ .BI \-d count ] [ @@ -78,6 +78,12 @@ the \*(lqWCPU\*(rq column respectively. Show system processes in the display. Normally, system processes such as the pager and the swapper are not shown. This option makes them visible. .TP +.B \-a +Display command names derived from the argv[] vector, rather than real +executable name. It's useful when you want to watch applications, that +puts their status information there. If the real name differs from argv[0], +it will be displayed in parenthesis. +.TP .B \-b Use \*(lqbatch\*(rq mode. In this mode, all input from the terminal is ignored. Interrupt characters (such as ^C and ^\e) still have an effect. diff --git a/contrib/top/top.c b/contrib/top/top.c index 81933e4..970d143 100644 --- a/contrib/top/top.c +++ b/contrib/top/top.c @@ -65,6 +65,8 @@ extern char *optarg; /* imported from screen.c */ extern int overstrike; +static int fmt_flags = 0; + /* signal handling routines */ sigret_t leave(); sigret_t onalrm(); @@ -193,9 +195,9 @@ char *argv[]; fd_set readfds; #ifdef ORDER - static char command_chars[] = "\f qh?en#sdkriIutHmSCo"; + static char command_chars[] = "\f qh?en#sdkriIutHmSCao"; #else - static char command_chars[] = "\f qh?en#sdkriIutHmSC"; + static char command_chars[] = "\f qh?en#sdkriIutHmSCa"; #endif /* these defines enumerate the "strchr"s of the commands in command_chars */ #define CMD_redraw 0 @@ -219,8 +221,9 @@ char *argv[]; #define CMD_viewtog 17 #define CMD_viewsys 18 #define CMD_wcputog 19 +#define CMD_showargs 20 #ifdef ORDER -#define CMD_order 20 +#define CMD_order 21 #endif /* set the buffer for stdout */ @@ -277,7 +280,7 @@ char *argv[]; optind = 1; } - while ((i = getopt(ac, av, "CSIHbinquvs:d:U:m:o:t")) != EOF) + while ((i = getopt(ac, av, "CSIHabinquvs:d:U:m:o:t")) != EOF) { switch(i) { @@ -316,6 +319,10 @@ char *argv[]; interactive = No; break; + case 'a': + fmt_flags ^= FMT_SHOWARGS; + break; + case 'd': /* number of displays to show */ if ((i = atoiwi(optarg)) == Invalid || i == 0) { @@ -651,7 +658,8 @@ restart: /* now show the top "n" processes. */ for (i = 0; i < active_procs; i++) { - (*d_process)(i, format_next_process(processes, get_userid)); + (*d_process)(i, format_next_process(processes, get_userid, + fmt_flags)); } } else @@ -1020,6 +1028,9 @@ restart: case CMD_viewsys: ps.system = !ps.system; break; + case CMD_showargs: + fmt_flags ^= FMT_SHOWARGS; + break; #ifdef ORDER case CMD_order: new_message(MT_standout, diff --git a/contrib/top/top.h b/contrib/top/top.h index 59cdeed..2b32d10 100644 --- a/contrib/top/top.h +++ b/contrib/top/top.h @@ -39,4 +39,9 @@ char *version_string(); enum displaymodes { DISP_CPU = 0, DISP_IO, DISP_MAX }; +/* + * Format modifiers + */ +#define FMT_SHOWARGS 0x00000001 + extern enum displaymodes displaymode; -- cgit v1.1