Date: Fri, 02 May 2014 14:19:10 -0600 From: Ian Lepore <ian@FreeBSD.org> To: Bryan Drewery <bdrewery@FreeBSD.org> Cc: svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org Subject: Re: svn commit: r265229 - head/bin/ps Message-ID: <1399061950.22079.195.camel@revolution.hippie.lan> In-Reply-To: <201405021505.s42F5lQO099446@svn.freebsd.org> References: <201405021505.s42F5lQO099446@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 2014-05-02 at 15:05 +0000, Bryan Drewery wrote: > Author: bdrewery > Date: Fri May 2 15:05:47 2014 > New Revision: 265229 > URL: http://svnweb.freebsd.org/changeset/base/265229 > > Log: > Add -J to filter by matching jail IDs and names. > > -J 0 can be used to show only host processes. > > Patch partially based on work by bz@ > > PR: bin/78763 > MFC after: 2 weeks > Relnotes: yes > > Modified: > head/bin/ps/Makefile > head/bin/ps/ps.1 > head/bin/ps/ps.c > > Modified: head/bin/ps/Makefile > ============================================================================== > --- head/bin/ps/Makefile Fri May 2 14:47:53 2014 (r265228) > +++ head/bin/ps/Makefile Fri May 2 15:05:47 2014 (r265229) > @@ -11,7 +11,7 @@ SRCS= fmt.c keyword.c nlist.c print.c ps > # on large systems. > # > CFLAGS+=-DLAZY_PS > -DPADD= ${LIBM} ${LIBKVM} > -LDADD= -lm -lkvm > +DPADD= ${LIBM} ${LIBKVM} ${LIBJAIL} > +LDADD= -lm -lkvm -ljail > > .include <bsd.prog.mk> > > Modified: head/bin/ps/ps.1 > ============================================================================== > --- head/bin/ps/ps.1 Fri May 2 14:47:53 2014 (r265228) > +++ head/bin/ps/ps.1 Fri May 2 15:05:47 2014 (r265229) > @@ -29,7 +29,7 @@ > .\" @(#)ps.1 8.3 (Berkeley) 4/18/94 > .\" $FreeBSD$ > .\" > -.Dd December 27, 2013 > +.Dd May 2, 2014 > .Dt PS 1 > .Os > .Sh NAME > @@ -40,6 +40,7 @@ > .Op Fl aCcdefHhjlmrSTuvwXxZ > .Op Fl O Ar fmt | Fl o Ar fmt > .Op Fl G Ar gid Ns Op , Ns Ar gid Ns Ar ... > +.Op Fl J Ar jid Ns Op , Ns Ar jid Ns Ar ... > .Op Fl M Ar core > .Op Fl N Ar system > .Op Fl p Ar pid Ns Op , Ns Ar pid Ns Ar ... > @@ -62,7 +63,7 @@ will also display processes that do not > .Pp > A different set of processes can be selected for display by using any > combination of the > -.Fl a , G , p , T , t , > +.Fl a , G , J , p , T , t , > and > .Fl U > options. > @@ -152,6 +153,20 @@ Print information associated with the fo > .Cm user , pid , ppid , pgid , sid , jobc , state , tt , time , > and > .Cm command . > +.It Fl J > +Display information about processes which match the specified jail IDs. > +This may be either the > +.Cm jid > +or > +.Cm name > +of the jail. > +Use > +.Fl J > +.Sy 0 > +to display only host processes. > +This flag implies > +.Fl x > +by default. > .It Fl L > List the set of keywords available for the > .Fl O > > Modified: head/bin/ps/ps.c > ============================================================================== > --- head/bin/ps/ps.c Fri May 2 14:47:53 2014 (r265228) > +++ head/bin/ps/ps.c Fri May 2 15:05:47 2014 (r265229) > @@ -50,6 +50,7 @@ static char sccsid[] = "@(#)ps.c 8.4 (Be > __FBSDID("$FreeBSD$"); > > #include <sys/param.h> > +#include <sys/jail.h> > #include <sys/proc.h> > #include <sys/user.h> > #include <sys/stat.h> > @@ -62,6 +63,7 @@ __FBSDID("$FreeBSD$"); > #include <errno.h> > #include <fcntl.h> > #include <grp.h> > +#include <jail.h> > #include <kvm.h> > #include <limits.h> > #include <locale.h> > @@ -124,6 +126,7 @@ struct listinfo { > const char *lname; > union { > gid_t *gids; > + int *jids; > pid_t *pids; > dev_t *ttys; > uid_t *uids; > @@ -132,6 +135,7 @@ struct listinfo { > }; > > static int addelem_gid(struct listinfo *, const char *); > +static int addelem_jid(struct listinfo *, const char *); > static int addelem_pid(struct listinfo *, const char *); > static int addelem_tty(struct listinfo *, const char *); > static int addelem_uid(struct listinfo *, const char *); > @@ -163,12 +167,12 @@ static char vfmt[] = "pid,state,time,sl, > "%cpu,%mem,command"; > static char Zfmt[] = "label"; > > -#define PS_ARGS "AaCcde" OPT_LAZY_f "G:gHhjLlM:mN:O:o:p:rSTt:U:uvwXxZ" > +#define PS_ARGS "AaCcde" OPT_LAZY_f "G:gHhjJ:LlM:mN:O:o:p:rSTt:U:uvwXxZ" > > int > main(int argc, char *argv[]) > { > - struct listinfo gidlist, pgrplist, pidlist; > + struct listinfo gidlist, jidlist, pgrplist, pidlist; > struct listinfo ruidlist, sesslist, ttylist, uidlist; > struct kinfo_proc *kp; > KINFO *kinfo = NULL, *next_KINFO; > @@ -208,6 +212,7 @@ main(int argc, char *argv[]) > prtheader = showthreads = wflag = xkeep_implied = 0; > xkeep = -1; /* Neither -x nor -X. */ > init_list(&gidlist, addelem_gid, sizeof(gid_t), "group"); > + init_list(&jidlist, addelem_jid, sizeof(int), "jail id"); > init_list(&pgrplist, addelem_pid, sizeof(pid_t), "process group"); > init_list(&pidlist, addelem_pid, sizeof(pid_t), "process id"); > init_list(&ruidlist, addelem_uid, sizeof(uid_t), "ruser"); > @@ -275,6 +280,11 @@ main(int argc, char *argv[]) > case 'h': > prtheader = ws.ws_row > 5 ? ws.ws_row : 22; > break; > + case 'J': > + add_list(&jidlist, optarg); > + xkeep_implied = 1; > + nselectors++; > + break; > case 'j': > parsefmt(jfmt, 0); > _fmt = 1; > @@ -538,6 +548,11 @@ main(int argc, char *argv[]) > if (kp->ki_rgid == gidlist.l.gids[elem]) > goto keepit; > } > + if (jidlist.count > 0) { > + for (elem = 0; elem < jidlist.count; elem++) > + if (kp->ki_jid == jidlist.l.jids[elem]) > + goto keepit; > + } > if (pgrplist.count > 0) { > for (elem = 0; elem < pgrplist.count; elem++) > if (kp->ki_pgid == > @@ -666,6 +681,7 @@ main(int argc, char *argv[]) > } > } > free_list(&gidlist); > + free_list(&jidlist); > free_list(&pidlist); > free_list(&pgrplist); > free_list(&ruidlist); > @@ -727,6 +743,30 @@ addelem_gid(struct listinfo *inf, const > } > > static int > +addelem_jid(struct listinfo *inf, const char *elem) > +{ > + int tempid; > + > + if (*elem == '\0') { > + warnx("Invalid (zero-length) jail id"); > + optfatal = 1; > + return (0); /* Do not add this value. */ > + } > + > + tempid = jail_getid(elem); > + if (tempid < 0) { > + warnx("Invalid %s: %s", inf->lname, elem); > + optfatal = 1; > + return (0); > + } > + > + if (inf->count >= inf->maxcount) > + expand_list(inf); > + inf->l.jids[(inf->count)++] = tempid; > + return (1); > +} > + > +static int > addelem_pid(struct listinfo *inf, const char *elem) > { > char *endp; > @@ -1373,7 +1413,7 @@ usage(void) > > (void)fprintf(stderr, "%s\n%s\n%s\n%s\n", > "usage: ps " SINGLE_OPTS " [-O fmt | -o fmt] [-G gid[,gid...]]", > - " [-M core] [-N system]", > + " [-J jid[,jid...]] [-M core] [-N system]", > " [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]", > " ps [-L]"); > exit(1); > I'm getting an error building rescue after this change: --- rescue.all__D --- ps.lo: In function `_$$hide$$ ps.lo $a': _$$hide$$ ps.lo ps.c:(.text+0x26ec): undefined reference to `jail_getid' *** [rescue] Error code 1 bmake[4]: stopped in /local/build/staging/freebsd/wand/obj/arm.armv6/local/build/staging/freebsd/wand/src/rescue/rescue 1 error This is on arm, building with gcc, but I'm not sure whether that's germane or not. -- Ian
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1399061950.22079.195.camel>