Commit Graph

4040 Commits

Author SHA1 Message Date
Jim Warner
49f92f690c library: refactor the escape_str utf-8 validation code
The last time library 'escape' logic was refactored in
the patch referenced below potential problems remained
which have now surfaced. They involve those C1 control
characters especially device control strings (DCS/ST).

Such strings, if not handled by the terminal emulator,
could lead to abnormal behaviors or even some exploit.

So, this commit will now escape the multi-byte control
characters (U+0080 thru U+009f). All single byte ascii
control characters were already treated in this manner.

[ in addition, continuation bytes in utf-8 encodings ]
[ requiring two bytes or more will also be validated ]

And unlike the current code, which will escape all the
remaining non-ascii bytes when some error is detected,
this patch honors remaining valid ascii & utf-8 bytes.

Reference(s):
. Dec, 2020 - 'escape' logic' was refactored *again)
commit 649e45482f

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-07-30 21:08:20 +10:00
Jim Warner
77bd62863a top: added summary area memory sources to man document
This patch was prompted by the issue referenced below.

It also places the top man page on a par with the free
man page which does a good job of documenting sources.

Reference(s):
https://gitlab.com/procps-ng/procps/-/issues/292

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-07-17 18:09:51 +10:00
Shen-Ta Hsieh
978f49eb4c Makefile.am: Add ncurses cflags to top and slabtop
If the ncurses library is installed in an unusual spot the compilier
won't find them without these flags:

gcc -std=gnu99 -DHAVE_CONFIG_H -I.  -include ./config.h -I. -I./include -Wno-unused-result -DLOCALEDIR=\"$PREFIX/share/locale\"  -Iproc -O2 -pipe -fno-plt -fexceptions -Wp,-D_FORTIFY_SOURCE=2,-D_GLIBCXX_ASSERTIONS -Wformat -Werror=format-security -Wno-psabi -fstack-clash-protection -MT slabtop.o -MD -MP -MF $depbase.Tpo -c -o slabtop.o slabtop.c &&\
mv -f $depbase.Tpo $depbase.Po
slabtop.c:31:10: fatal error: ncurses.h: No such file or directory

Signed-off-by: Craig Small <csmall@dropbear.xyz>

References:
 !134
2023-07-17 17:34:12 +10:00
Craig Small
9fc76f7feb misc: Add NEWS for previous
References:
 commit 2eafd0a215
 !193

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-07-13 20:27:48 +10:00
EulerOSWander
2eafd0a215 vmstat: remove this process form the number of processe
When 'r' in vmstat displays the number of processed,
delete the vmstat process, which is the same ad the
version before refactoring.

Signed-off-by: zhoujie <zhoujie133@huawei.com>
2023-07-13 10:25:10 +00:00
Roman Žilka
f4fd9d0b3a Resolved all warnings with -O2 -Wall (gcc 12.3, Linux, x86_64) 2023-07-13 09:45:48 +02:00
Craig Small
f4eeff0b26 vmstat: Print guest time
Guest time was removed from User time but not printed. This meant
that if guest time was non-zero then the CPU numbers did not add
up to 100%

References:
 !191
 !113
 commit 2461bb5bc1

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-07-11 19:16:15 +10:00
Roman Žilka
d313765571 pgrep: Minor memleak on multiple F cmdline options 2023-06-22 09:25:12 +02:00
EulerOSWander
b51ef773ad pmap: Increase memory allocation failure judgment
Call trace:
  #0 __vsnprintf_internal
  #1 0x00007f967aedd656 in __GI___snprintf
  #2 0x00005612da28c707 in snprintf
  #3 config_read (rc_filename=<optimized out>) at pmap.c:885
  #4 0x00005612da28b8c0 int main at pmap.c:1144

The above stack is caused by calling a null pointer
after the memory allocation fails. Increase the null
pointer judgment.

signed-off-by: zhoujie <zhoujie133@huawei.com>
2023-06-13 06:34:07 +00:00
EulerOSWander
e47f3922be sysctl: remove redundant code
The xstrdup function calls strdup internally,
and strdup will apply for memory internally
and needs to be released externally. The
function calls xstrdup(name) twice, but only
releases the memory requested by the second
call. The first call of xstrdup(name) is
meaningless, so it is recommended to delete it.

signed-off-by: zhoujie <zhoujie133@huawei.com>
2023-06-13 06:29:40 +00:00
Craig Small
cfb3c482a5 pgrep: Suppress warning if using regex
pgrep gives a warning if the match string is longer than
15 characters and there was no match. That often does not
make sense when using regex or at the very least difficult
to know when to warn users. e.g
"1234567890|123456789X" is a 21 character string but only
matching two 10 string words.

pgrep has a simple check for regex and will now suppress
that warning if that has been used.

References:
 https://bugs.debian.org/1037450

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-06-13 16:23:35 +10:00
Jim Warner
bc688d630a library: restore the proper main thread tics valuation
The issue cited below revealed an earlier commit, also
shown below, resulted in an incorrect tics value for a
thread group leader. That change was made so the group
leader would have a proper autogroup id, not a -1 that
was shown with sibling threads which lacked that file.

So this patch will just restore pre version 4 behavior
while not upsetting LIBPROC_HIDE_KERNEL functionality.

[ this change means that when THREAD mode is active, ]
[ the autogroup id & nice values won't be available. ]
[ they were only shown for the group leaders anyway. ]

Reference(s):
https://gitlab.com/procps-ng/procps/-/issues/280
. Aug, 2021 - thread group leader change
commit a375262609

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-05-31 18:25:07 +10:00
Jim Warner
dd6a99c92d NEWS: include several more changes since release 4.0.3
Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-05-31 17:49:08 +10:00
Thorsten Kukuk
abc36c23f0 library: use sd_booted() if systemd is in use
sd_get_sessions() will not return ENOENT as error, as this only means
that there is no session, not that systemd is not used. Use the
recommended sd_booted() function for this.

Signed-off-by: Thorsten Kukuk <kukuk@suse.com>
Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-05-31 16:52:41 +10:00
Craig Small
9646c8fb0e testsuite: Tests for failed ps output
A test to check that the ps -lm bug doesn't come back.

References:
  commit 93b7f05e54
  commit 35dc38cb7f

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-05-27 20:52:03 +10:00
Jim Warner
93b7f05e54 ps: trade previous fix for final solution to -m option
Well as luck would have it I found yet another missing
field (SCHED_CLASS) that's needed by that '-m' option.
And, while it could just be added to the previous test
of thread_flags and TF_U_m, here is a much better fix.

[ The problem lies with the lists_and_needs function ]
[ where a new format list was created and some print ]
[ functions changed to pr_nop which displays a dash! ]

[ So, by calling the finalize_stacks function before ]
[ calling lists_and_needs, the former will see those ]
[ format nodes before any print function is changed. ]

Reference(s):
May, 2023 - missing fields with -m option
commit 35dc38cb7f

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-05-27 20:08:18 +10:00
Jim Warner
35dc38cb7f ps: address missing or corrupted fields with -m option
Coincidentally, a Debian bug report and a gitlab issue
were raised at nearly the same time and are referenced
below. They both dealt with that '-m' (thread) option.

That option forces tasks and their threads to be shown
on separate lines. Also, information may be suppressed
between that main process and any lightweight process.

The bottom line was sometimes a required pids_item may
not have been requested from the library before trying
to display a result. For the best case, some incorrect
results might be shown. However, in the worst case (as
with PIDS_WCHAN_NAME) a segmentation fault is created.

[ After addressing the '-m' option problems, another ]
[ issue was found with that '-F' (extra full format) ]
[ option. The PSR (processor) field was always zero. ]
[ It was addressed in a similar manner to the above. ]

Reference(s):
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1036631
https://gitlab.com/procps-ng/procps/-/issues/279

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-05-25 20:47:38 +10:00
gldrk
65756674f0 top: improve control character handling in line editing
terminfo is notoriously unreliable when it comes to the
erase character. Use the terminal setting instead. Also
hardcode both commonly used characters just to be safe.
Do not assign unwanted actions to '\0'.

Reference(s):
https://gitlab.com/procps-ng/procps/-/issues/278
2023-05-12 08:06:55 +10:00
Craig Small
c8afe6ff84 w: Fix musl UT_HOSTSIZE issue
While musl has utmpx.h, their header file does not define all the
values, especially __UT_HOSTSIZE and friends. Instead it just
hard codes the sizes :/

This change will look for that definition specifically and if
not found will include utmp.h too. Checked on Alpine 3.17

musl just makes these a stub so w doesn't work anyway.

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-05-07 20:27:50 +10:00
hdzhoujie
786335b967 top: lessen summary cpu distortions with first display
When the cpu utilization is displayed for
the first time, the reading of the /proc/stat
file is very close to each other, resulting
in large fluctuations. The version before
refactoring, such as v3.3.17, has a delay
before reading the /proc/stat file for the
second time, and the same delay is added here.

signed-off-by: zhoujie <zhoujie133@huawei.com>
signed-off-by: he jingxian <hejingxian@huawei.com>
Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-05-07 20:25:23 +10:00
Jim Warner
a4e9a8508c top: lessen overhead when field is not being displayed
This program employs fixed size stacks which currently
total 85 result structures. When a field was not being
shown, those unused result structures were initialized
as 'PIDS_extra' items. As a result, that library would
then reset the results to zero with every interaction.

For any of those result structs holding values created
by top this was appropriate. But for most, it was not.

So this patch will reduce that use of PIDS_extra while
vastly increasing use of the less expensive PIDS_noop.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-05-07 09:43:44 +10:00
Jim Warner
1c9e65d785 library: improve the assign results function, pids api
Currently, all the newlib APIs handle the assigning of
results the same. Namely, they loop through the stacks
while checking for the hidden 'logical_end' fencepost.
Along the way, the Item_table was indexed to determine
which 'setsfunc' to call, passing suitable parameters.

The approach was quite robust since by testing against
the unsigned 'logical_end' enumerator this library was
immune from user result corruption. The worst that may
happen was early loop exit with some results unvalued.

However, there was a drawback to the current approach.

For every result structure in every stack, an index to
that Item_table had to be calculated for a 'setsfunc'.
For programs like top or ps that may involve thousands
of Item_table index recalculations for each iteration.

With this commit, in support of assign, we will now do
the needed Item_table calculations just one time under
the 'new' and 'reset' functions. Then, at assign time,
the only overhead is actually invoking the 'setsfunc'.

This makes us even more robust than we were before. No
longer will a corrupted results structure suffer early
assign exit leaving some unvalued. Rather, all results
are properly placed regardless of any user corruption.

[ those other interfaces will remain unchanged since ]
[ the depth of their stacks are modest and since the ]
[ assign guys weren't already passed an info pointer ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-05-07 09:43:44 +10:00
Jim Warner
157612a5ed library: delete a redundant 'items' variable, pids api
Ever since this pids api was first introduced in 2015,
there existed both the 'curitems' plus 'maxitems' used
internally. While the reasoning behind such duality is
lost to time, it probably related to top's capacity to
grow/shrink stack size depending on what is displayed.

While top no longer employs a dynamically sized stack,
with the current library logic it makes no difference.
For sometime now the pids guy handles either approach.

So, this commit converts all references to 'maxitems'.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-05-07 09:43:44 +10:00
Craig Small
29727540b2 nls: Fix Romanian language file
Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-05-07 09:41:25 +10:00
Craig Small
2b4a5028ab nls: Update translation files 2023-05-02 21:07:25 +10:00
Craig Small
b31ac2dcce free: Show single line statistics
Added the -L --line option to free to show a small
set of memory statistics on a single line of 80 characters.
Largely based on the work of @Ulenrich1 and updated to
the new API.

References:
 procps-ng/procps#156

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-05-02 20:32:38 +10:00
ed neville
4a315c9230 Store sec and usec in terms of usec
Rather than attempt to convert usec to sec with division, add both
together and then divide.

This reduced the rounding errors on my system.
2023-05-02 09:08:37 +00:00
наб
29f06ff8e7 sysctl.8: SEE ALSO proc(5) with list of sysctls
Ref: https://bugs.debian.org/1033477
Ref: https://lore.kernel.org/linux-man/7818bd3c-0351-a738-fd69-14b59838cbeb@gmail.com/t/#u
Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz>
2023-04-25 07:23:05 +00:00
Zhao Mengmeng
25cd1bee0c slabinfo: add comment for cache_size calculation
One of our physical machine shows that the "CACHE SIZE" column
of slabtop output is extremely high, three times of the products
of objs nums and objs size. After some analysis, we found that
the order of slab, which decides "pages per slab", will shrink
when memory pressure is high and normal order allocation failed.
So we think it might help to add these comments to the man help.

Minor fix: add the "memory." back, which is lost after
"aa461df0: docs: Minor manpage fixes"

Signed-off-by: Zhao Mengmeng <zhaomengmeng@kylinos.cn>
2023-04-25 07:19:22 +00:00
hdzhoujie
833cdc64f0 top: added 'guest' tics when multiple cpus were merged
The 'guest' tics are added in the
sum_tics function, but when multiple
cpus are combined for display, the
'guest' tics are not added cumulatively
in the sum_unify function.

signed-off-by: zhoujie <zhoujie133@huawei.com>
2023-04-20 09:27:19 +08:00
Jim Warner
0e98e06777 NEWS: darn, I forgot to label one change as issue #272
Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-04-05 07:20:35 +10:00
Jim Warner
c2ab0adc6d NEWS: include several more changes since release 4.0.3
Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-03-26 21:08:33 +11:00
Thorsten Kukuk
6d5d4d2804 library: use sd_get_sessions() instead of utmp
The utmp format of glibc is not Y2038 safe, not even on 64bit systems.
Query logind/elogind for the number of users if we use libsystemd.

Signed-off-by: Thorsten Kukuk <kukuk@suse.com>
2023-03-21 22:26:03 +11:00
Craig Small
1f910eeb0e Fix test for double test
References:
  issue procps-ng/procps#271
2023-03-21 22:22:33 +11:00
Jim Warner
bb7e161d5a top: address the missing 'guest' tics for summary area
Well this is embarrassing. After repeatedly flogging a
horse (represented by issue #274) I was certain it was
dead. But, it turns out that the darn thing yet lived.

In fact, the bug that was patched was not even the one
the poster experienced. Now merge request #173 finally
penetrated my foggy brain and explicated the real bug.

Since forever (linux 2.6), top has ignored those guest
and guest_nice fields in /proc/stat. When many virtual
machines were running that overhead went unrecognized.

So, this commit simply adds those tics to the 'system'
figures so that it can be seen in text or graph modes.

Reference(s):
https://gitlab.com/procps-ng/procps/-/merge_requests/173

https://gitlab.com/procps-ng/procps/-/issues/274
. Mar 2023, avoid keystroke '%Cpu' distortions
commit 7e33fc47c6

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-03-21 22:11:29 +11:00
Jim Warner
411eaa1aa7 top: restore a commit which had been reverted in error
Please do not look at this change and especially don't
look at that commit message for the patch shown below.

[ that way you won't notice I misinterpreted 'H' for ]
[ an 'h' when this logic was reversed as 'redundant' ]

Reference(s):
commit 7e33fc47c6

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-03-21 22:11:29 +11:00
Jim Warner
7e33fc47c6 top: avoid '%Cpu' distortion resulting from keystrokes
Like a line from the movie Cool Hand Luke: "what we've
got here is failure to communicate"; well that was me!

Finally, I got a handle on the issue referenced below.

At first, it seemed inappropriate to try comparing cpu
percentages as reported by different top versions. And
even more so when they are invoked many seconds apart.

As it turns out, this issue had nothing to do with the
specific processor. Nor did it involve two versions of
top running simultaneously using the same delay value.
Rather, it concerns keyboard input and several changes
which were made last year in commits referenced below.

They were prompted by development of the 'Ctrl' bottom
window feature. Initially, if transitioning from a big
window to a small window portions of the former window
remained visible until the next refresh. A solution to
that led to a flaw when resizing top. Fixing that then
created a race condition with full screen replacement.

The net effect of all those changes was to distort the
cpu percentage value for the processor on which top is
dispatched to service user input. It arose because the
new frame was begun immediately, yielding few 'ticks'.

[ when fewer ticks are accumulated the potential for ]
[ distortion increases. As an example, hold some key ]
[ then watch cpu percentages (works best in graphs). ]

[ while any version of top will show distortions for ]
[ the above experiment, a v4.0.0 top will be greater ]
[ and %cpu is distorted even for a single keystroke. ]

So, to restore proper 3.3.17 keystroke behavior, we'll
revert parts of the first 3 commits shown below. Plus,
the 4th commit will be entirely reversed as redundant.

Reference(s):
https://gitlab.com/procps-ng/procps/-/issues/274

. Sep, 2022 - avoid potential 'BREAK_screen' race
commit 3e5016c289
. Sep, 2022 - fix improper sigwinch behavior
commit 9d9993708b
. May, 2022 - made more responsive to kdb input
commit 3ea1bc779f
. turn bottom window off with additional key
commit 3f068a66c8

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-03-09 20:16:47 +11:00
Jim Warner
cbbe8fe324 top: ensure an EXIT_FAILURE with bad command line args
When getopt usage was added (plus long options) in the
patch shown below, top no longer returned EXIT_FAILURE
when the error message was generated by getopt itself.

This commit will restore the proper behavior no matter
who might issue a command line argument error message.

Thanks to Bastian Bittorf for discovering this buglet.

Reference(s):
https://gitlab.com/procps-ng/procps/-/issues/273
. sep, 2021 - getopt with long form args
commit c91b371485

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-03-08 22:18:39 +11:00
Thorsten Kukuk
cced1e49ef w: make sure null terminated ut_* strings are used
strncpy does not null terminate a string if it has the maximal length.
Use always the null terminated variants for ut_user and ut_line.

Signed-off-by: Thorsten Kukuk <kukuk@suse.com>
2023-03-08 07:30:56 +11:00
Jim Warner
133a833942 library: become more tolerant of /proc/cpuinfo formats
In the issue referenced below, it is now apparent that
not all architectures follow a logical/expected format
for the /proc/cpuinfo file. Specifically, the expected
empty line after each processor entry might be missing
under some architectures for the last processor shown.

[ and a belated review of kernel source confirms it. ]

So this commit makes our stat module a little bit more
tolerant of some potential missing newline characters.

[ along the way, it's also now tolerant of a missing ]
[ cpuinfo file plus more efficient whenever a cpu is ]
[ is not linked to a core or toggled offline/online. ]

Reference(s):
https://gitlab.com/procps-ng/procps/-/issues/272
procps-ng/procps#272

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-03-02 19:38:41 +11:00
Craig Small
8c81808de0 pgrep: Use only --signal option for signal
When pgrep was used to match on signal, it makes sense to use
the same signal parsing code as pkill. Unfortunately the
"find the signal" part is a little too enthusaistic about what a
signal is, meaning

pgrep -u -42

fails because the signal becomes "42" and then there is no UID.

This is a bit sad for pkill but has been that way for a long
time. For pgrep this is new so now only the long form
pgrep --signal <X>
will work.

In addition, when using --signal if pgrep/pkill couldn't work
out what the signal was it just silently ignored it. It now
complains and aborts.

References:
 https://bugs.debian.org/1031765
 commit 866abacf88
2023-03-01 17:35:14 +11:00
Craig Small
9b2f49166b tests: Dont compare floats with ==
Comparing floats with == is bad and I should feel bad I did this.
The problem is if something is close to, but not quite the exact
same fails tests.

I have used an epsilon of 1 because we don't care about accuracy,
just that the function works well enough.

References:
 issue procps-ng/procps#271
 https://how-to.fandom.com/wiki/Howto_compare_floating_point_numbers_in_the_C_programming_language

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-03-01 17:20:42 +11:00
Craig Small
806eb270f2 NEWS: Release 4.0.3 2023-02-16 07:26:15 +11:00
Lukas Märdian
414e33a8af testsuite🆓 total committed memory can be negative (if overcommitted)
E.g. on my system I see this output to "free -vh", which fails the test:
               total        used        free      shared  buff/cache   available
Mem:            23Gi        17Gi       311Mi       2.2Gi       8.1Gi       5.8Gi
Swap:          2.0Gi       1.9Gi       105Mi
Comm:           13Gi        44Gi       -31Gi
2023-02-15 11:02:57 +01:00
Jim Warner
95cd051c27 misc: tweak the recent copyright changes just a little
This commit just tweaks some recent copyright changes.

Foe example, the six public header files are unique to
this new library and thus are just attributed to Craig
and me. Plus, there were some misnamed file references
as '.c' for '.h' or 'libprocps' instead of 'libproc2'.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-02-14 07:11:51 +11:00
Craig Small
6eb0857531 nls: Updated the translations from TP website
Fixed the Swedish man-po file too

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-02-08 18:39:28 +11:00
Craig Small
c1edb15259 misc: Update copyright of remaining man pages
Giving them all a standard format and using either the existing
header or the git logs to put the relevant authors in.
2023-02-08 18:28:55 +11:00
Jim Warner
3727cf4478 misc: Update the copyrights for the ps and top sources
This patch just follows Craig's lead for the remaining
ps and top program files and associated man documents.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-02-08 16:53:04 +11:00
Craig Small
8fcfb01a81 misc: Update the copyrights of files
The copyrights of the source files were all out of date and were not
the same format. This has been corrected. The source of the authors
was examining the git log for each file.

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-02-07 21:09:48 +11:00
Craig Small
5ee3dc2626 nls: Update translations 2023-01-28 12:59:10 +11:00