[PATCH] Re: Threads in top
Jung-uk Kim
jkim at niksun.com
Thu Jul 17 12:56:06 PDT 2003
On Thursday 17 July 2003 03:49 pm, Jeremy Messenger wrote:
> On Thu, 17 Jul 2003 15:45:18 -0400, Jung-uk Kim <jkim at niksun.com> wrote:
> > The patch adds command line option "-H" and interactive command
> > "H".
>
> I think, you have forgotten to attach your patch. ;-)
I haven't. :-/ Mailman is always cutting my attachment. This time I
inlined it. Sorry for the inconvenience.
Jung-uk Kim
> Cheers,
> Mezz
>
> > Enjoy,
> >
> > Jung-uk Kim
> >
> > On Thursday 17 July 2003 01:49 am, Terry Lambert wrote:
> >> Kai Mosebach wrote:
> >> > is it somehow possible to hide the threads in top / only see
> >> > the master process ?
> >>
> >> The ps program does this by not showing threads unless invoked
> >> with the "-H" option. Probably someone who wants to hide the
> >> threads in top (hint hint) should do what ps does in order to
> >> make top act the same way (Darwin uses "-M" instead of "-H",
> >> but FreeBSD uses this for system dump image files).
> >>
> >> FWIW, the implementation detail is that everything is returned,
> >> and the filtering occurs on display.
> >>
> >> -- Terry
------ src/contrib/top/commands.c Thu Jan 24 12:52:26 2002
+++ src/contrib/top.new/commands.c Thu Jul 17 15:02:32 2003
@@ -70,6 +70,7 @@
fputs("\
d - change number of displays to show\n\
e - list errors generated by last \"kill\" or \"renice\" command\n\
+H - toggle the displaying of threads\n\
i - toggle the displaying of idle processes\n\
I - same as 'i'\n\
k - kill processes; send a signal to a list of processes\n\
--- src/contrib/top/machine.h Thu Jan 24 12:58:42 2002
+++ src/contrib/top.new/machine.h Thu Jul 17 14:48:19 2003
@@ -59,6 +59,7 @@
int idle; /* show idle processes */
int self; /* show self */
int system; /* show system processes */
+ int thread; /* show threads */
int uid; /* only this uid (unless uid == -1) */
char *command; /* only this command (unless == NULL) */
};
--- src/contrib/top/top.c Thu Jan 24 12:55:40 2002
+++ src/contrib/top.new/top.c Thu Jul 17 15:04:42 2003
@@ -192,9 +192,9 @@
fd_set readfds;
#ifdef ORDER
- static char command_chars[] = "\f qh?en#sdkriIuto";
+ static char command_chars[] = "\f qh?en#sdkriIutHo";
#else
- static char command_chars[] = "\f qh?en#sdkriIut";
+ static char command_chars[] = "\f qh?en#sdkriIutH";
#endif
/* these defines enumerate the "strchr"s of the commands in command_chars */
#define CMD_redraw 0
@@ -214,8 +214,9 @@
#define CMD_idletog2 13
#define CMD_user 14
#define CMD_selftog 15
+#define CMD_thrtog 16
#ifdef ORDER
-#define CMD_order 16
+#define CMD_order 17
#endif
/* set the buffer for stdout */
@@ -245,6 +246,7 @@
ps.self = -1;
ps.system = No;
ps.uid = -1;
+ ps.thread = Yes;
ps.command = NULL;
/* get preset options from the environment */
@@ -270,7 +272,7 @@
optind = 1;
}
- while ((i = getopt(ac, av, "SIbinquvs:d:U:o:t")) != EOF)
+ while ((i = getopt(ac, av, "SIHbinquvs:d:U:o:t")) != EOF)
{
switch(i)
{
@@ -364,11 +366,15 @@
case 't':
ps.self = (ps.self == -1) ? getpid() : -1;
break;
-
+
+ case 'H':
+ ps.thread = !ps.thread;
+ break;
+
default:
fprintf(stderr, "\
Top version %s\n\
-Usage: %s [-ISbinqut] [-d x] [-s x] [-o field] [-U username] [number]\n",
+Usage: %s [-HISbinqut] [-d x] [-s x] [-o field] [-U username] [number]\n",
version_string(), myname);
exit(1);
}
@@ -955,6 +961,14 @@
}
break;
+ case CMD_thrtog:
+ ps.thread = !ps.thread;
+ new_message(MT_standout | MT_delayed,
+ " %sisplaying threads.",
+ ps.thread ? "D" : "Not d");
+ putchar('\r');
+ break;
+
#ifdef ORDER
case CMD_order:
new_message(MT_standout,
@@ -979,7 +993,7 @@
}
break;
#endif
-
+
default:
new_message(MT_standout, " BAD CASE IN SWITCH!");
putchar('\r');
--- src/usr.bin/top/machine.c Sun Feb 16 09:09:52 2003
+++ src/usr.bin/top.new/machine.c Thu Jul 17 14:56:13 2003
@@ -414,7 +414,10 @@
int show_command;
- pbase = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc);
+ if (sel->thread)
+ pbase = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc);
+ else
+ pbase = kvm_getprocs(kd, KERN_PROC_PROC, 0, &nproc);
if (nproc > onproc)
pref = (struct kinfo_proc **) realloc(pref, sizeof(struct kinfo_proc *)
* (onproc = nproc));
More information about the freebsd-threads
mailing list