svn commit: r265229 - head/bin/ps
Ian Lepore
ian at FreeBSD.org
Fri May 2 20:19:16 UTC 2014
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
More information about the svn-src-head
mailing list