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
This commit is contained in:
parent
9e934e2d88
commit
13767130c7
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=265229
@ -11,7 +11,7 @@ SRCS= fmt.c keyword.c nlist.c print.c ps.c
|
||||
# on large systems.
|
||||
#
|
||||
CFLAGS+=-DLAZY_PS
|
||||
DPADD= ${LIBM} ${LIBKVM}
|
||||
LDADD= -lm -lkvm
|
||||
DPADD= ${LIBM} ${LIBKVM} ${LIBJAIL}
|
||||
LDADD= -lm -lkvm -ljail
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
19
bin/ps/ps.1
19
bin/ps/ps.1
@ -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 have controlling terminals.
|
||||
.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 following keywords:
|
||||
.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
|
||||
|
46
bin/ps/ps.c
46
bin/ps/ps.c
@ -50,6 +50,7 @@ static char sccsid[] = "@(#)ps.c 8.4 (Berkeley) 4/2/94";
|
||||
__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,re,pagein,vsz,rss,lim,tsiz,"
|
||||
"%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);
|
||||
@ -726,6 +742,30 @@ addelem_gid(struct listinfo *inf, const char *elem)
|
||||
return (1);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user