Commit Graph

2018 Commits

Author SHA1 Message Date
Craig Small
f37e5eec96 pgrep: use tty_name
pgrep used to extract tty and then convert to a name. As the library
does this for you now there is no need for the double step.
2015-09-26 08:31:06 +10:00
Craig Small
b5e3c5e835 pgrep: Use new library API
Change pgrep to use new library API. Threads now use their own
name instead of parent process.  Updated man page to make note
of it.
2015-09-26 08:19:32 +10:00
Jim Warner
86b155b83f library: make the pids_sort_order enums more intuitive
The values of PROCPS_SORT_ASCEND & PROCPS_SORT_DESCEND
were a tad unintuitive. This patch will just make them
a more natural +1 for ascending and -1 for descending.

[ plus it still allows that fast path multiplication ]
[ instead of a comparison for signed numbers/strings ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:39:40 +10:00
Jim Warner
872be3a3a2 top: trade 'look_up_our_self' for a new API equivalent
With the advent of the 'fatal_proc_unmounted' function
in the <pids.h> API to ensure the /proc filesystem was
mounted, we will finally get rid of the last remaining
vestiges of the former libprocps <readproc> interface.

[ also play a little catch up and whack some headers ]
[ that are not necessary now, beyond that readproc.h ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:39:10 +10:00
Jim Warner
007e032805 library: introduce a fatal 'proc not mounted' function
Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:38:38 +10:00
Jim Warner
42af8ffbc1 library: enable an 'invariant' stack for that pids API
After peeking at possible conversion of the ps program
it appeared that we may ultimately need the concept of
a 'static' pids_stack in suport of look_up_our_self().
In other words, one not impacted by procps_pids_reset.

This patch simply sets the stage for that possibility.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:37:40 +10:00
Jim Warner
80f1a05b78 library: abandon long/long long distinction with KLONG
With this patch the distinction between a 'long' KLONG
and a 'long long' KLONG is being abandoned in favor of
a consistent declaration as 'long' only. Plus we would
have also defined it as 'unsigned' except there exists
much code already explicitly specifying the qualifier.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:37:02 +10:00
Jim Warner
987f4f2e3e pmap: adapt to changes in <pids> API regarding address
This commit was prompted by that change from 'addr' to
'ul_int' in the <pids> interface. Along the way, KLONG
was removed as having long ago outlived its usefulness
as performance optimizations for weird configurations.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:36:36 +10:00
Jim Warner
f0e447cc66 library: exchange <pids> 'addr' for that 'ul_int' type
Work on converting ps has revealed the desirability of
trading a void pointer for that ul_int type. There was
much arithmetic employed against such values and casts
would otherwise have been required. Even pmap needed a
cast on occasions when comparing an internal variable.

Besides, there is much to be said for reducing demands
on (and the complexity of) the result structure union.

[ we choose ul_int over ull_int since that former is ]
[ the exact same size and capacity as a void pointer ]
[ regardless of whether compiled as 32-bit or 64-bit ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:36:05 +10:00
Jim Warner
105c69164b top: update the man document reporting bugs suggestion
Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:35:23 +10:00
Jim Warner
836c134579 library: with valgrind help, fix faulty meminfo assign
Not sure how this one has gone unnoticed until now but
with valgrind's help it's going bye-bye lickety-split.

Reference(s):
==26533== Conditional jump or move depends on uninitialised value(s)
==26533==    at 0x4E4082B: procps_meminfo_stack_fill (meminfo.c:408)

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:35:05 +10:00
Jim Warner
88daa89883 miscellaneous: silence a whole bunch of clang warnings
[ but most definitely not all of them by a long shot ]

Reference(s):
proc/diskstat.c:186:17: warning: unused variable 'is_disk' [-Wunused-variable]
    int retval, is_disk;
                ^
proc/namespace.c:110:1: warning: control may reach end of non-void function [-Wreturn-type]
}
^
proc/readproc.c:1131:50: warning: address of array 'ent->d_name' will always evaluate to 'true' [-Wpointer-bo
    if(unlikely(unlikely(!ent) || unlikely(!ent->d_name))) return 0;
                                           ~~~~~~^~~~~~
proc/readproc.c:1158:50: warning: address of array 'ent->d_name' will always evaluate to 'true' [-Wpointer-bo
    if(unlikely(unlikely(!ent) || unlikely(!ent->d_name))) return 0;
                                           ~~~~~~^~~~~~
proc/sysinfo.c:45:12: warning: unused variable 'stat_fd' [-Wunused-variable]
static int stat_fd = -1;
           ^
proc/sysinfo.c:49:12: warning: unused variable 'meminfo_fd' [-Wunused-variable]
static int meminfo_fd = -1;
           ^
proc/sysinfo.c:51:12: warning: unused variable 'vminfo_fd' [-Wunused-variable]
static int vminfo_fd = -1;
           ^
proc/sysinfo.c:53:12: warning: unused variable 'vm_min_free_fd' [-Wunused-variable]
static int vm_min_free_fd = -1;
           ^
proc/uptime.c:157:12: warning: unused variable 'realseconds' [-Wunused-variable]
    time_t realseconds;
           ^
proc/uptime.c:158:16: warning: unused variable 'realtime' [-Wunused-variable]
    struct tm *realtime;
               ^
vmstat.c:574:20: warning: format specifies type 'unsigned int' but the argument has type 'unsigned long' [-Wformat]
                   DSTAT(PROCPS_DISKSTAT_READ_TIME),
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vmstat.c:578:20: warning: format specifies type 'unsigned int' but the argument has type 'unsigned long' [-Wformat]
                   DSTAT(PROCPS_DISKSTAT_WRITE_TIME),
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
watch.c:230:7: warning: variable 'endptr' is uninitialized when used here [-Wuninitialized]
        if (*endptr == '\0') set_ansi_attribute(0); /* [m treated as [0m */
             ^~~~~~

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:34:27 +10:00
Jim Warner
a6b50e59ef miscellaneous: cleanup accumulated trailing whitespace
Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-21 22:33:50 +10:00
Jim Warner
efcbbe93ea top: plug a rather big hole in the display fields dike
Whoa, guess what field got overlooked in that march to
the newlib conversion? It was the TTY guy. However, it
wasn't completely top's fault - that newlib must share
at least some responsibility, for only offering a num.

[ and while we're at it, let's touch up the man page ]
[ to agree with ol' newlib's current implementation. ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-09 21:22:44 +10:00
Jim Warner
17d77f8016 library: add PROCPS_PIDS_TTY_NAME to compliment number
OK, ok, this was kind of a huge omission. So please do
not select the TTY field for display in top quite yet,
at least until a next patch has been pushed to GitLab.

And to produce a correct sort order for this new field
the GNU 'strverscmp' routine was a necessary addition.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-09 21:22:43 +10:00
Craig Small
617a4d0f70 library: Add space after days for uptime
Uptime output for both w and uptime command were showing no
comma or space after days.

$ ./uptime
 18:32:21 up 22 days7 min,  6 users,  load average: 0.23, 0.46, 0.64

Minor tweak to fix this.
2015-09-07 18:38:39 +10:00
Jim Warner
4c31bb49e5 w: correct program help & man page regarding arguments
This commit is an outgrowth of the research into a bug
involving the recently added enum 'PROCPS_PIDS_extra'.

Since this program is not equipped to filter more than
one user, the help text and man document were updated.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-07 18:11:48 +10:00
Jim Warner
14359a0afe w: eliminate inappropriate cmdline padding with spaces
This commit is an outgrowth of the research into a bug
involving the recently added enum 'PROCPS_PIDS_extra'.

The WHAT portion of output is being padded with spaces
since the printf field width format specifier was used
in combination with a precision specifier. This commit
reduces the format string to just that precision part.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-07 18:11:48 +10:00
Jim Warner
5e46a145ba library: ensure any 'flags' is consistently 'unsigned'
This commit is an outgrowth of the research into a bug
that recently surfaced with the 'w' program. And while
that program was just a victim several inconsistencies
were found in the handling of library flags during the
research. This patch just address such irregularities.

Reference(s):
http://www.freelists.org/post/procps/newlib-at-the-precipice,4

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-07 18:11:48 +10:00
Jim Warner
c39f4735c0 library: swat (now) obvious bug from PROCPS_PIDS_extra
I can't remember during what sleepy hour that enum was
added to pids.h, but it damn sure fell short of a full
implementation by approximately 1,000,000 miles or so.

Strangely it surfaced on Craig's system seemingly ggdb
related whereas on mine, a segmentation fault was only
seen when that -h (no header) argument was being used.

Oh well, the road to its resolution also offered us an
opportunity to cleanup some other items along the way.

Reference(s):
http://www.freelists.org/post/procps/newlib-at-the-precipice,4

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-07 18:11:48 +10:00
Jim Warner
34395be330 library: suppress zero 'days' under the <uptime.h> API
The former whattime logic used to suppress that 'days'
output when the system had been up less than 24 hours.

But since the refactor for newlib, '0 days' was always
output under those conditions. So this commit restores
the former expected behavior of suppressing that item.

[ plus an erroneous calculation of uphours was fixed ]

[ and the clang warnings shown below were also fixed ]

Reference(s):
proc/uptime.c:74:10: warning: unused variable 'buf' [-Wunused-variable]
    char buf[256];
         ^
proc/uptime.c:131:58: warning: data argument not used by format string [-Wformat-extra-args]
        pos += sprintf(upbuf + pos, "%d min, ", uphours, upminutes);
                                    ~~~~~~~~~~           ^
proc/uptime.c:175:15: warning: expression result unused [-Wunused-value]
        comma +1;
        ~~~~~ ^~

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-06 21:59:17 +10:00
Jim Warner
bb04019510 top: utilize a library result struct for 'forest view'
When top was originally adapted to use that <pids> API,
the forest view support was redesigned since the proc_t
pad_3 byte could no longer be employed to hold a task's
nesting level. The redesign required additional arrays.

Now that the dust is settling on those initial efforts,
that PROCPS_PIDS_noop item was used as a substitute for
the old pad_3 along with a return to the former design.
But, while it proved adequate, the invariant nature for
that item required of top an extra initialization step.

So the library was coaxed into adding one more pid_item
(PROCPS_PIDS_extra) which will, unlike that 'noop' guy,
be reset with each reap. Everybody should be happy now.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-06 21:58:27 +10:00
Jim Warner
07ec0b4e09 library: extend 'noop' concept to a resettable 'extra'
The presence of that PROCPS_PIDS_noop may yet see some
use in the future with its 'no alter' library promise.

However, when top used that item to reflect the forest
view nesting level, the unchanging nature of that item
became more of an inconvenience than benefit. For each
refresh top was forced to loop through all the stacks,
resetting that PROCPS_PIDS_noop result struct to zero.

So this commit will now offer users a choice between a
new re-initialized item (PROCPS_PIDS_extra) & the noop
invariant.  Since the library already resets all those
result structures, top will now utilize it at no cost.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-06 21:57:49 +10:00
Jim Warner
b2853ed117 top: do not co-mingle strings/numbers under namespaces
Craig's recent commit under that newlib branch dealing
with namespace support has prompted me to review top's
handling of those fields. Currently, when such a field
is zero, top displays a dash ('-'). This will mean the
justification toggles ('j/J') will behave incorrectly.

This patch simply allows the potential zero to display
or be suppressed with the already existing '0' toggle.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-06 21:57:09 +10:00
Craig Small
1bfc9235b4 Grab the CI file from master 2015-09-03 22:55:36 +10:00
Jim Warner
f1bd82ff07 top: still more tidying up after <pids> implementation
A patch containing the following miscellaneous tweaks:

. remove a function that handled former library errors
[ that function should have gone bye-bye with 3.3.11 ]
[ when those 'wchan' provisions were much simplified ]

. make clearer a distinction between 'new' and 'reset'
[ use PROCPS_PIDS_noop when procps_pids_new() called ]
[ since at that point we are only establishing depth ]

Reference(s):
http://www.freelists.org/post/procps/newlib-for-pgrep,1

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-03 22:37:54 +10:00
Jim Warner
1b38b751ff library: more miscellaneous pids implementation tweaks
A patch containing the following miscellaneous tweaks:

. make a supposedly robust parameter test truly robust
[ ensure the largest enum value used with validation ]

. remove duplicate item test in cleanup_stack function
[ is already subordinate to test of PROCPS_PIDS_noop ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-09-03 22:37:50 +10:00
Craig Small
a61f78d6e0 library: rework namespace calls
Functions related to namespaces were half-in half-out of the
procps library and didn't fit the standard naming scheme.

While struct { long ns[x]} is a bit clunky, its the only way
to "lock in" x. The alternative is to use ns_* variables.

This work was needed before pgrep could be converted.
2015-09-03 22:32:19 +10:00
Craig Small
d9caf0980e skill: Remove unrequired headers
Removed unrequired headers in the include statements for skill.
2015-09-01 22:19:34 +10:00
Craig Small
99fa7f9f57 watch: Correctly process [m Remove lib dependency
The commit referenced below made the ANSI sequence
[m be interpreted as [0m However this change was put
in the incorrect place and would reference an undefined
pointer, causing a crash. Thanks to Jimmy Theis for the
second heads-up.

watch doesn't need any libprocps functions so it is no
longer linked to them.

References:
 commit a5937e4e94
 https://www.freelists.org/post/procps/watch-crashes-but-its-not-the-latest-commit-fault
 https://www.freelists.org/post/procps/Segmentation-fault-in-watch-3311
2015-09-01 21:28:07 +10:00
Craig Small
0f44172a5e sysctl: Remove links to library
sysctl doesn't use any symbols from the libprocps library so
this  update removes those dependencies.
2015-09-01 20:57:56 +10:00
Craig Small
6252bf439f library: Remove tty_to_dev()
This library call was imported into w as it was only used in
this program.  Converting a tty to a device is not really the
work for libprocps.
2015-09-01 20:41:25 +10:00
Craig Small
a02911c1ea w: use the new procps_pids library interface
w using the new procps_pids calls from the library. There are
some clean-ups of the code within w as well.
2015-08-31 22:49:11 +10:00
Jim Warner
eba58ec17a library: beef up 'enum pids_item' parameter validation
I was surprised to find that ol' gcc silently converts
a single (different) enum into an address where one or
more enums were expected to be dereferenced. Of course
this was just yet another way to generate an old SEGV.

So this commit will strengthen those parameter checks.

[ we will *not* blame Craig for a failure to consult ]
[ the documentation, since it doesn't even exist yet ]

Reference(s):
http://www.freelists.org/post/procps/newlib-ps-fix,8

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-31 17:49:19 +10:00
Jim Warner
e2898e213f pmap: modify to utilize that new procps_pids interface
Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-31 17:48:33 +10:00
Jim Warner
0299bd15b0 pmap: silence a clang -Wuninitialized variable warning
Reference(s):
pmap.c:618:20: warning: variable 'start' is uninitialized when used here [-Wuninitialized]
                                               maxw1, start,
                                                      ^~~~~
Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-31 17:47:53 +10:00
Jim Warner
8072b6aa84 pmap: correct heading misalignment of VmFlags with -XX
Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-31 17:47:37 +10:00
Jim Warner
1c597b58ef top: polish some things related to the pids adaptation
A patch containing the following miscellaneous tweaks:

. exploit (actually adapt) a pids.h provided VAL macro
. remove some obsolete, now unused, sort related items
. clarify the comment for specialized extractor macros

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-31 17:47:23 +10:00
Jim Warner
e169b41a85 library: accumulated changes to <pids> code & comments
A patch containing the following miscellaneous tweaks:

. avoided distortions unique to PROCPS_PIDS_TICS_DELTA
. addressed several smatch warnings and/or suggestions
. ensured oldproc_close invoked should tally_proc fail
. keeping that namespace clean, added a missing #undef
. added 2 comments acknowledging pids_item as unsigned
. added/clarified comments regarding proc flags & strv

From smatch analysis:
. these were indeed boo-boos
pids.c:580 make_hist() warn: the 'Hr' macro might need parens
pids.c:1058 procps_pids_reap() warn: variable dereferenced before check 'info' (see line 1056)
. these were not errors (and we did double check)
pids.c:1067 procps_pids_reap() warn: double check that we're allocating correct size: 8 vs 128
pids.c:1068 procps_pids_reap() warn: double check that we're allocating correct size: 8 vs 128

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-31 17:46:53 +10:00
Jim Warner
d0b28bcefd pidof: modify to utilize the new procps_pids interface
As an additional test of the viability of the new pids
API, the pidof program has now been converted. As part
of that effort, several library changes were prompted:

. individual reads were added as an alternative to the
all encompassing (maybe over broad?) 'reap' provision.

. an alternate version of cgroup, cmdline plus environ
has been added to represent actual vectorized strings.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-27 22:23:05 +10:00
Jim Warner
272081cbe6 library: introduce pids 'value extractor' helper macro
As an experiment a helper macro used to extract values
from a result stack has been added to the header file.

Don't force callers to reinvent that particular wheel.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-27 22:22:01 +10:00
Jim Warner
f69c421295 library: add real string vectors to the pids interface
After experimenting with an adaptation of pidof to the
new pids interface, it became apparent that vectorized
versions of those command lines would be necessary. So
this commit adds that option and the strv result type.

And since the stage had been set, a vectorized version
of PROCPS_PIDS_ENVIRON & PROCPS_PIDS_CGROUP was added.

Lastly, any use of 'const' in the result structure was
removed so callers need not be bothered with casts and
compiler warnings. Hopefully, they'll respect a stack.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-27 22:21:30 +10:00
Jim Warner
9ecc0c8473 library: add sequential access to that pids collection
To ease the transition to the new interface, for other
than that top program, individual read provisions have
been added to the <proc/pids.h> API. This represents a
refinement of a position stated in a post noted below.

Reference(s):
http://www.freelists.org/post/procps/newlib-ps-fix

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-27 22:20:51 +10:00
Jim Warner
def5858810 library: fix major oops in procps_pids_reap() function
In my zeal to finalize the initial pids implementation
I omitted some quite important parameter checking from
the above function. Thank goodness top was kind to us.

Also, in anticipation of the additions of single stack
read and supporting functions some items were renamed.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-27 22:19:54 +10:00
Jim Warner
66cd99270d top: respond to library changes regarding self lookups
Just in case, make the old proc_t used in the before()
function static so valgrind doesn't get his panties in
a bunch over the fact the 'cmd' is now dynamic memory.

[ Shouldn't that function, or an equivalent, also be ]
[ part of our new library's implementation? However, ]
[ is it proper for a brand new library to abnormally ]
[ terminate a calling process with a stderr message? ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-26 22:42:02 +10:00
Jim Warner
e949b78c30 library: revert changes to 'look_up_our_self' function
The patch below is where most proc_t fixed size arrays
became simple pointers to char. In that commit changes
to the above function were made so that dynamic memory
was freed which included the program name (cmd) field.

That change was prompted by a valgrind reported memory
leak during development that no longer seems to exist.
However, by keeping the look_up_our_self() changes the
ps command without args then fails to report anything.

So this patch just restores the expected old behavior.

Reference(s):
commit 3881a0844a

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-26 22:42:02 +10:00
Jim Warner
64238730fa build, library & top: make OOMEM options unconditional
It was probably always wrong to have a variable length
proc_t structure. This patch takes all remaining oomem
former suse only options and makes them unconditional.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-23 21:08:18 +10:00
Jim Warner
f0c23e51ec top: misc tweaks to code/comments after pid adaptation
. didn't need a separate table for enum pids_reap_type
since top's 'Thread_mode' itself can be used directly.

. with pids support & the loss of forest_based(), that
forest_adds() function had to be renamed so the prolog
comment regarding naming convention was still honored.

. adapted to a library change to the pids_reap struct.

Signed-off-by: Jim Warner <james.warner@comcast.net>

TOP, respond to library change to the pids_reap struct ...

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-23 21:08:18 +10:00
Jim Warner
387d4030f4 library: miscellaneous tweaks to pid code and comments
. traded a complex misaligned memory allocation scheme
in the make_hist function for a simple aligned scheme.
plus memory allocation increases are globally defined.

. changed 1 parameter for procps_pids_stacks_sort() to
better reflect the 'array of pointers', not an address
of a pointer as is used with guys such as 'new/unref'.

. the pids_reap struct was changed slightly to make it
more reflective of it's actual implementation details.

. the Item_table member .mustfree is now .needfree and
that .makehist was now made .needhist for consistency.

. reduced the number of separate 'return NULL;' source
statements in that primary procps_pids_reap() routine.

. ensured consistent reference to sizeof(void *) & not
occasional reference to sizeof(void*) without a space.

. rather than enable/disable validate_stacks via a #if
in the function body, it is now handled via a #define.

. some comments in the procps_pids_reset function were
adjusted to reflect this current implementation. shown
originally, they reflected an aborted attempt to avoid
a testing aberration not fully understood at the time.

. added a summary of the memory overhead cost of HST_t
processing to that UNREF_RPTHASH output at unref time.

. a 'PIDs at max depth:' portion of that UNREF_RPTHASH
enabled #define is now published only when the maximum
depth of hash table entry chains exceed depths of one.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-23 21:08:18 +10:00
Jim Warner
f937ff8238 top: eliminated old kernel-2.4 & 2.5 support (man too)
The newlib informal cutoff for kernel support seems to
be around release 2.6. This commit eliminates any such
support for really old 2.4 and 2.5 kernels within top.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2015-08-23 21:05:07 +10:00