mirror of
https://github.com/opnsense/src.git
synced 2026-06-08 00:02:14 -04:00
ps(1): clean up after swapout removal
The process flag P_INMEM is always set. Eliminate all checks for the bit. Also eliminate LAZY_PS define and code covered by it: we do not have an u-area for long time, and it cannot be swapped out. Also eliminate setting controlled by the '-f' switch, but accept it for backward compatibility. The 'W' process secondary state (swapped out) is impossible, stop calculating it. Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D47492
This commit is contained in:
parent
14b3a4564a
commit
62e6ca0f07
4 changed files with 10 additions and 53 deletions
|
|
@ -2,13 +2,6 @@ PACKAGE=runtime
|
|||
PROG= ps
|
||||
SRCS= fmt.c keyword.c nlist.c print.c ps.c
|
||||
|
||||
#
|
||||
# To support "lazy" ps for non root/wheel users
|
||||
# add -DLAZY_PS to the cflags. This helps
|
||||
# keep ps from being an unnecessary load
|
||||
# on large systems.
|
||||
#
|
||||
CFLAGS+=-DLAZY_PS
|
||||
LIBADD= m kvm jail xo
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
|
|
|||
|
|
@ -253,8 +253,6 @@ state(KINFO *k, VARENT *ve __unused)
|
|||
*cp = '?';
|
||||
}
|
||||
cp++;
|
||||
if (!(flag & P_INMEM))
|
||||
*cp++ = 'W';
|
||||
if (k->ki_p->ki_nice < NZERO || k->ki_p->ki_pri.pri_class == PRI_REALTIME)
|
||||
*cp++ = '<';
|
||||
else if (k->ki_p->ki_nice > NZERO || k->ki_p->ki_pri.pri_class == PRI_IDLE)
|
||||
|
|
@ -633,7 +631,7 @@ getpcpu(const KINFO *k)
|
|||
#define fxtofl(fixpt) ((double)(fixpt) / fscale)
|
||||
|
||||
/* XXX - I don't like this */
|
||||
if (k->ki_p->ki_swtime == 0 || (k->ki_p->ki_flag & P_INMEM) == 0)
|
||||
if (k->ki_p->ki_swtime == 0)
|
||||
return (0.0);
|
||||
if (rawcpu)
|
||||
return (100.0 * fxtofl(k->ki_p->ki_pctcpu));
|
||||
|
|
@ -661,8 +659,6 @@ getpmem(KINFO *k)
|
|||
if (failure)
|
||||
return (0.0);
|
||||
|
||||
if ((k->ki_p->ki_flag & P_INMEM) == 0)
|
||||
return (0.0);
|
||||
/* XXX want pmap ptpages, segtab, etc. (per architecture) */
|
||||
/* XXX don't have info about shared */
|
||||
fracmem = ((double)k->ki_p->ki_rssize) / mempages;
|
||||
|
|
|
|||
|
|
@ -159,9 +159,6 @@ does not imply
|
|||
but works well with it.
|
||||
.It Fl e
|
||||
Display the environment as well.
|
||||
.It Fl f
|
||||
Show command-line and environment information about swapped out processes.
|
||||
This option is honored only if the UID of the user is 0.
|
||||
.It Fl G
|
||||
Display information about processes which are running with the specified
|
||||
real group IDs.
|
||||
|
|
@ -358,9 +355,7 @@ the include file
|
|||
.It Dv "P_TOTAL_STOP" Ta No "0x02000000" Ta "Stopped for system suspend"
|
||||
.It Dv "P_INEXEC" Ta No "0x04000000" Ta Process is in Xr execve 2
|
||||
.It Dv "P_STATCHILD" Ta No "0x08000000" Ta "Child process stopped or exited"
|
||||
.It Dv "P_INMEM" Ta No "0x10000000" Ta "Loaded into memory"
|
||||
.It Dv "P_SWAPPINGOUT" Ta No "0x20000000" Ta "Process is being swapped out"
|
||||
.It Dv "P_SWAPPINGIN" Ta No "0x40000000" Ta "Process is being swapped in"
|
||||
.It Dv "P_INMEM" Ta No "0x10000000" Ta "Always set, unused"
|
||||
.It Dv "P_PPTRACE" Ta No "0x80000000" Ta "Vforked child issued ptrace(PT_TRACEME)"
|
||||
.El
|
||||
.It Cm flags2
|
||||
|
|
@ -491,8 +486,6 @@ The process is a session leader.
|
|||
The process' parent is suspended during a
|
||||
.Xr vfork 2 ,
|
||||
waiting for the process to exec or exit.
|
||||
.It Li W
|
||||
The process is swapped out.
|
||||
.It Li X
|
||||
The process is being traced or debugged.
|
||||
.El
|
||||
|
|
|
|||
41
bin/ps/ps.c
41
bin/ps/ps.c
|
|
@ -68,14 +68,6 @@
|
|||
#define W_SEP " \t" /* "Whitespace" list separators */
|
||||
#define T_SEP "," /* "Terminate-element" list separators */
|
||||
|
||||
#ifdef LAZY_PS
|
||||
#define DEF_UREAD 0
|
||||
#define OPT_LAZY_f "f"
|
||||
#else
|
||||
#define DEF_UREAD 1 /* Always do the more-expensive read. */
|
||||
#define OPT_LAZY_f /* I.e., the `-f' option is not added. */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* isdigit takes an `int', but expects values in the range of unsigned char.
|
||||
* This wrapper ensures that values from a 'char' end up in the correct range.
|
||||
|
|
@ -92,7 +84,6 @@ int showthreads; /* will threads be shown? */
|
|||
|
||||
struct velisthead varlist = STAILQ_HEAD_INITIALIZER(varlist);
|
||||
|
||||
static int forceuread = DEF_UREAD; /* Do extra work to get u-area. */
|
||||
static kvm_t *kd;
|
||||
static int needcomm; /* -o "command" */
|
||||
static int needenv; /* -e */
|
||||
|
|
@ -154,7 +145,7 @@ static char vfmt[] = "pid,state,time,sl,re,pagein,vsz,rss,lim,tsiz,"
|
|||
"%cpu,%mem,command";
|
||||
static char Zfmt[] = "label";
|
||||
|
||||
#define PS_ARGS "AaCcD:de" OPT_LAZY_f "G:gHhjJ:LlM:mN:O:o:p:rSTt:U:uvwXxZ"
|
||||
#define PS_ARGS "AaCcD:defG:gHhjJ:LlM:mN:O:o:p:rSTt:U:uvwXxZ"
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
|
|
@ -272,12 +263,9 @@ main(int argc, char *argv[])
|
|||
case 'e': /* XXX set ufmt */
|
||||
needenv = 1;
|
||||
break;
|
||||
#ifdef LAZY_PS
|
||||
case 'f':
|
||||
if (getuid() == 0 || getgid() == 0)
|
||||
forceuread = 1;
|
||||
/* compat */
|
||||
break;
|
||||
#endif
|
||||
case 'G':
|
||||
add_list(&gidlist, optarg);
|
||||
xkeep_implied = 1;
|
||||
|
|
@ -1276,31 +1264,21 @@ fmt(char **(*fn)(kvm_t *, const struct kinfo_proc *, int), KINFO *ki,
|
|||
return (s);
|
||||
}
|
||||
|
||||
#define UREADOK(ki) (forceuread || (ki->ki_p->ki_flag & P_INMEM))
|
||||
|
||||
static void
|
||||
saveuser(KINFO *ki)
|
||||
{
|
||||
char tdname[COMMLEN + 1];
|
||||
char *argsp;
|
||||
|
||||
if (ki->ki_p->ki_flag & P_INMEM) {
|
||||
/*
|
||||
* The u-area might be swapped out, and we can't get
|
||||
* at it because we have a crashdump and no swap.
|
||||
* If it's here fill in these fields, otherwise, just
|
||||
* leave them 0.
|
||||
*/
|
||||
ki->ki_valid = 1;
|
||||
} else
|
||||
ki->ki_valid = 0;
|
||||
ki->ki_valid = 1;
|
||||
|
||||
/*
|
||||
* save arguments if needed
|
||||
*/
|
||||
if (needcomm) {
|
||||
if (ki->ki_p->ki_stat == SZOMB) {
|
||||
ki->ki_args = strdup("<defunct>");
|
||||
} else if (UREADOK(ki) || (ki->ki_p->ki_args != NULL)) {
|
||||
} else if (ki->ki_p->ki_args != NULL) {
|
||||
(void)snprintf(tdname, sizeof(tdname), "%s%s",
|
||||
ki->ki_p->ki_tdname, ki->ki_p->ki_moretdname);
|
||||
ki->ki_args = fmt(kvm_getargv, ki,
|
||||
|
|
@ -1315,11 +1293,8 @@ saveuser(KINFO *ki)
|
|||
ki->ki_args = NULL;
|
||||
}
|
||||
if (needenv) {
|
||||
if (UREADOK(ki))
|
||||
ki->ki_env = fmt(kvm_getenvv, ki,
|
||||
(char *)NULL, (char *)NULL, 0);
|
||||
else
|
||||
ki->ki_env = strdup("()");
|
||||
ki->ki_env = fmt(kvm_getenvv, ki, (char *)NULL,
|
||||
(char *)NULL, 0);
|
||||
if (ki->ki_env == NULL)
|
||||
xo_errx(1, "malloc failed");
|
||||
} else {
|
||||
|
|
@ -1479,7 +1454,7 @@ pidmax_init(void)
|
|||
static void __dead2
|
||||
usage(void)
|
||||
{
|
||||
#define SINGLE_OPTS "[-aCcde" OPT_LAZY_f "HhjlmrSTuvwXxZ]"
|
||||
#define SINGLE_OPTS "[-aCcdeHhjlmrSTuvwXxZ]"
|
||||
|
||||
xo_error("%s\n%s\n%s\n%s\n%s\n",
|
||||
"usage: ps [--libxo] " SINGLE_OPTS " [-O fmt | -o fmt]",
|
||||
|
|
|
|||
Loading…
Reference in a new issue