[PATCH] Re: Threads in top
Jung-uk Kim
jkim at niksun.com
Thu Jul 17 13:59:31 PDT 2003
This is revised version of the patch. The previous version was
made in haste. It's actually one-line-style-change(TM) and
functionally the same. ;-)
Anyway, can anybody edit man page for this change,
i.e., src/usr.bin/top/top.local.1? I am a terrible doc writer.
Thanks,
Jung-uk Kim
--- 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,8 @@
int show_command;
- pbase = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc);
+ pbase = kvm_getprocs(kd, sel->thread ? KERN_PROC_ALL : 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