library: add support for the 'LIBPROC_HIDE_KERNEL' var
This patch was prompted by Björn Fischer's merge #147 request referenced below. It has been generalized such that it now embraces both of those 'pids_fetch' types. [ and thanks to Björn for initiating this extension ] Reference(s): https://gitlab.com/procps-ng/procps/-/merge_requests/147 Prototyped-by: Björn Fischer <bf@CeBiTec.Uni-Bielefeld.DE> Signed-off-by: Jim Warner <james.warner@comcast.net>
This commit is contained in:
parent
cbff1dd106
commit
2a7ec67ac8
@ -1225,7 +1225,10 @@ static proc_t *simple_readproc(PROCTAB *restrict const PT, proc_t *restrict cons
|
|||||||
if (flags & PROC_FILLAUTOGRP) // value the 2 autogroup fields
|
if (flags & PROC_FILLAUTOGRP) // value the 2 autogroup fields
|
||||||
autogroup_fill(path, p);
|
autogroup_fill(path, p);
|
||||||
|
|
||||||
if (rc == 0) return p;
|
// openproc() ensured that a ppid will be present when needed ...
|
||||||
|
if (rc == 0)
|
||||||
|
return (PT->hide_kernel && (p->ppid == 2 || p->tid == 2)) ? NULL : p;
|
||||||
|
|
||||||
errno = ENOMEM;
|
errno = ENOMEM;
|
||||||
next_proc:
|
next_proc:
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1514,10 +1517,13 @@ PROCTAB *openproc(unsigned flags, ...) {
|
|||||||
va_list ap;
|
va_list ap;
|
||||||
struct stat sbuf;
|
struct stat sbuf;
|
||||||
static __thread int did_stat;
|
static __thread int did_stat;
|
||||||
|
static __thread int hide_kernel = -1;
|
||||||
PROCTAB *PT = calloc(1, sizeof(PROCTAB));
|
PROCTAB *PT = calloc(1, sizeof(PROCTAB));
|
||||||
|
|
||||||
if (!PT)
|
if (!PT)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
if (hide_kernel < 0)
|
||||||
|
hide_kernel = (NULL != getenv("LIBPROC_HIDE_KERNEL"));
|
||||||
if (!did_stat){
|
if (!did_stat){
|
||||||
task_dir_missing = stat("/proc/self/task", &sbuf);
|
task_dir_missing = stat("/proc/self/task", &sbuf);
|
||||||
did_stat = 1;
|
did_stat = 1;
|
||||||
@ -1547,6 +1553,13 @@ PROCTAB *openproc(unsigned flags, ...) {
|
|||||||
}
|
}
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
|
if (hide_kernel > 0) {
|
||||||
|
PT->hide_kernel = 1;
|
||||||
|
// we'll need the ppid, ensure it's obtained via cheapest means ...
|
||||||
|
if (!(PT->flags & (PROC_FILLSTAT | PROC_FILLSTATUS)))
|
||||||
|
PT->flags |= PROC_FILLSTAT;
|
||||||
|
}
|
||||||
|
|
||||||
if (!src_buffer
|
if (!src_buffer
|
||||||
&& !(src_buffer = malloc(MAX_BUFSZ))) {
|
&& !(src_buffer = malloc(MAX_BUFSZ))) {
|
||||||
closedir(PT->procfs);
|
closedir(PT->procfs);
|
||||||
|
@ -203,6 +203,7 @@ typedef struct PROCTAB {
|
|||||||
uid_t *uids; // uids of procs
|
uid_t *uids; // uids of procs
|
||||||
int nuid; // cannot really sentinel-terminate unsigned short[]
|
int nuid; // cannot really sentinel-terminate unsigned short[]
|
||||||
int i; // generic
|
int i; // generic
|
||||||
|
int hide_kernel; // getenv LIBPROC_HIDE_KERNEL was set
|
||||||
unsigned flags;
|
unsigned flags;
|
||||||
unsigned u; // generic
|
unsigned u; // generic
|
||||||
void * vp; // generic
|
void * vp; // generic
|
||||||
|
Loading…
Reference in New Issue
Block a user