Add -J command/flag to filter by jail name/jid. This will automatically
display the JID as well (the -j command/flag). 0 displays host. + displays all. MFC after: 2 weeks Relnotes: yes
This commit is contained in:
parent
02e17f0b93
commit
1b60f97272
@ -66,6 +66,7 @@ struct process_select
|
||||
int thread; /* show threads */
|
||||
int uid; /* only this uid (unless uid == -1) */
|
||||
int wcpu; /* show weighted cpu */
|
||||
int jid; /* only this jid (unless jid == -1) */
|
||||
int jail; /* show jail ID */
|
||||
int kidle; /* show per-CPU idle threads */
|
||||
char *command; /* only this command (unless == NULL) */
|
||||
|
@ -20,6 +20,8 @@ top \- display and update information about the top cpu processes
|
||||
] [
|
||||
.BI \-s time
|
||||
] [
|
||||
.BI \-J jail
|
||||
] [
|
||||
.BI \-U username
|
||||
] [
|
||||
.I number
|
||||
@ -171,6 +173,21 @@ values are \*(lqcpu\*(rq, \*(lqsize\*(rq, \*(lqres\*(rq, and \*(lqtime\*(rq,
|
||||
but may vary on different operating systems. Note that
|
||||
not all operating systems support this option.
|
||||
.TP
|
||||
.BI \-J jail
|
||||
Show only those processes owned by
|
||||
.IR jail .
|
||||
This may be either the
|
||||
.B jid
|
||||
or
|
||||
.B name
|
||||
of the jail.
|
||||
Use
|
||||
.B 0
|
||||
to limit to host processes.
|
||||
Using this option implies the
|
||||
.B \-j
|
||||
flag.
|
||||
.PP
|
||||
.BI \-U username
|
||||
Show only those processes owned by
|
||||
.IR username .
|
||||
@ -315,6 +332,12 @@ Toggle the display of
|
||||
.IR jail (8)
|
||||
ID.
|
||||
.TP
|
||||
.B J
|
||||
Display only processes owned by a specific jail (prompt for jail).
|
||||
If the jail specified is simply \*(lq+\*(rq, then processes belonging
|
||||
to all jails and the host will be displayed.
|
||||
This will also enable the display of JID.
|
||||
.TP
|
||||
.B P
|
||||
Toggle the display of per-CPU statistics.
|
||||
.TP
|
||||
|
@ -38,7 +38,9 @@ char *copyright =
|
||||
#include <signal.h>
|
||||
#include <setjmp.h>
|
||||
#include <ctype.h>
|
||||
#include <sys/jail.h>
|
||||
#include <sys/time.h>
|
||||
#include <jail.h>
|
||||
|
||||
/* includes specific to top */
|
||||
#include "display.h" /* interface to display package */
|
||||
@ -198,9 +200,9 @@ char *argv[];
|
||||
fd_set readfds;
|
||||
|
||||
#ifdef ORDER
|
||||
static char command_chars[] = "\f qh?en#sdkriIutHmSCajzPo";
|
||||
static char command_chars[] = "\f qh?en#sdkriIutHmSCajzPJo";
|
||||
#else
|
||||
static char command_chars[] = "\f qh?en#sdkriIutHmSCajzP";
|
||||
static char command_chars[] = "\f qh?en#sdkriIutHmSCajzPJ";
|
||||
#endif
|
||||
/* these defines enumerate the "strchr"s of the commands in command_chars */
|
||||
#define CMD_redraw 0
|
||||
@ -228,8 +230,9 @@ char *argv[];
|
||||
#define CMD_jidtog 21
|
||||
#define CMD_kidletog 22
|
||||
#define CMD_pcputog 23
|
||||
#define CMD_jail 24
|
||||
#ifdef ORDER
|
||||
#define CMD_order 24
|
||||
#define CMD_order 25
|
||||
#endif
|
||||
|
||||
/* set the buffer for stdout */
|
||||
@ -261,6 +264,7 @@ char *argv[];
|
||||
ps.uid = -1;
|
||||
ps.thread = No;
|
||||
ps.wcpu = 1;
|
||||
ps.jid = -1;
|
||||
ps.jail = No;
|
||||
ps.kidle = Yes;
|
||||
ps.command = NULL;
|
||||
@ -288,7 +292,7 @@ char *argv[];
|
||||
optind = 1;
|
||||
}
|
||||
|
||||
while ((i = getopt(ac, av, "CSIHPabijnquvzs:d:U:m:o:t")) != EOF)
|
||||
while ((i = getopt(ac, av, "CSIHPabijJ:nquvzs:d:U:m:o:t")) != EOF)
|
||||
{
|
||||
switch(i)
|
||||
{
|
||||
@ -413,6 +417,15 @@ char *argv[];
|
||||
ps.jail = !ps.jail;
|
||||
break;
|
||||
|
||||
case 'J': /* display only jail's processes */
|
||||
if ((ps.jid = jail_getid(optarg)) == -1)
|
||||
{
|
||||
fprintf(stderr, "%s: unknown jail\n", optarg);
|
||||
exit(1);
|
||||
}
|
||||
ps.jail = 1;
|
||||
break;
|
||||
|
||||
case 'P':
|
||||
pcpu_stats = !pcpu_stats;
|
||||
break;
|
||||
@ -425,7 +438,7 @@ char *argv[];
|
||||
fprintf(stderr,
|
||||
"Top version %s\n"
|
||||
"Usage: %s [-abCHIijnPqStuvz] [-d count] [-m io | cpu] [-o field] [-s time]\n"
|
||||
" [-U username] [number]\n",
|
||||
" [-J jail] [-U username] [number]\n",
|
||||
version_string(), myname);
|
||||
exit(1);
|
||||
}
|
||||
@ -1085,6 +1098,44 @@ char *argv[];
|
||||
reset_display();
|
||||
putchar('\r');
|
||||
break;
|
||||
|
||||
case CMD_jail:
|
||||
new_message(MT_standout,
|
||||
"Jail to show: ");
|
||||
if (readline(tempbuf2, sizeof(tempbuf2), No) > 0)
|
||||
{
|
||||
if (tempbuf2[0] == '+' &&
|
||||
tempbuf2[1] == '\0')
|
||||
{
|
||||
ps.jid = -1;
|
||||
}
|
||||
else if ((i = jail_getid(tempbuf2)) == -1)
|
||||
{
|
||||
new_message(MT_standout,
|
||||
" %s: unknown jail", tempbuf2);
|
||||
no_command = Yes;
|
||||
}
|
||||
else
|
||||
{
|
||||
ps.jid = i;
|
||||
}
|
||||
if (ps.jail == 0) {
|
||||
ps.jail = 1;
|
||||
new_message(MT_standout |
|
||||
MT_delayed, " Displaying jail "
|
||||
"ID.");
|
||||
header_text =
|
||||
format_header(uname_field);
|
||||
reset_display();
|
||||
}
|
||||
putchar('\r');
|
||||
}
|
||||
else
|
||||
{
|
||||
clear_message();
|
||||
}
|
||||
break;
|
||||
|
||||
case CMD_kidletog:
|
||||
ps.kidle = !ps.kidle;
|
||||
new_message(MT_standout | MT_delayed,
|
||||
|
@ -21,8 +21,8 @@ WARNS?= 0
|
||||
CFLAGS+= -D"Table_size=${TOP_TABLE_SIZE}"
|
||||
.endif
|
||||
|
||||
DPADD= ${LIBTERMCAP} ${LIBM} ${LIBKVM}
|
||||
LDADD= -ltermcap -lm -lkvm
|
||||
DPADD= ${LIBTERMCAP} ${LIBM} ${LIBKVM} ${LIBJAIL}
|
||||
LDADD= -ltermcap -lm -lkvm -ljail
|
||||
|
||||
CLEANFILES= sigdesc.h
|
||||
SIGCONV_AWK= ${.CURDIR}/../../contrib/top/sigconv.awk
|
||||
|
@ -668,6 +668,7 @@ get_process_info(struct system_info *si, struct process_select *sel,
|
||||
|
||||
/* these are copied out of sel for speed */
|
||||
int show_idle;
|
||||
int show_jid;
|
||||
int show_self;
|
||||
int show_system;
|
||||
int show_uid;
|
||||
@ -710,6 +711,7 @@ get_process_info(struct system_info *si, struct process_select *sel,
|
||||
|
||||
/* set up flags which define what we are going to select */
|
||||
show_idle = sel->idle;
|
||||
show_jid = sel->jid != -1;
|
||||
show_self = sel->self == -1;
|
||||
show_system = sel->system;
|
||||
show_uid = sel->uid != -1;
|
||||
@ -764,6 +766,10 @@ get_process_info(struct system_info *si, struct process_select *sel,
|
||||
/* skip processes that aren't doing I/O */
|
||||
continue;
|
||||
|
||||
if (show_jid && pp->ki_jid != sel->jid)
|
||||
/* skip proc. that don't belong to the selected JID */
|
||||
continue;
|
||||
|
||||
if (show_uid && pp->ki_ruid != (uid_t)sel->uid)
|
||||
/* skip proc. that don't belong to the selected UID */
|
||||
continue;
|
||||
|
Loading…
Reference in New Issue
Block a user