Commit Graph

3780 Commits

Author SHA1 Message Date
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
Craig Small
ffff3eabdd testsuite: Remove trailing whitespace 2023-01-25 20:35:43 +11:00
Jason Cox
848be2b1e2 pgrep: make --terminal respect other criteria
In some cases the --terminal option to pgrep will cause all processes
matching the terminal to be output, even if other criteria would exclude them.
Specifically, I noticed that it overrides the --runstates option.

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-01-25 20:34:21 +11:00
Jim Warner
356730edbb top: make all man document apostrophe usage consistent
Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-01-24 12:15:19 +11:00
Jim Warner
a4add59024 top: squeeze namespace provision (^P) onto help screen
Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-01-24 12:15:19 +11:00
Jim Warner
6b71148840 top: restore tab highlight for ^L and ^P bottom window
With the commit shown below a BOT_PRESENT constant was
introduced. Unfortunately it was defined in a way that
disable ^L (message log) and ^P (namespaces) highlight
when using the tab key. This patch fixes such an oops.

Reference(s):
. Jan, 2023 - lessen 'bottom window' overhead
commit 28f44729da

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-01-24 12:15:19 +11:00
Jim Warner
f9afbabce7 misc: eliminated some instances of trailing whitespace
Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-01-24 12:15:19 +11:00
Craig Small
2532b5d2dd ps: Add configurable date format for lstart field
The lstart field has been converted to use the strftime()
function so that it uses the locale. A new option -D
allows the user to define the format that would want this
field to show.

This may mean the field will be longer than it should be,
especially for French locales and the user defined field,
but the field length can be specified too.

---

This commit started off making all the relevant fields use the
locale correctly so it could solve #226 as well. The issue
is there an implied restriction (or not) around
strftime("%b") and probably strftime("%a") for abbrievated month
and day names respectively.

English, and some/most other languages put an additional
restriction that all abbreviations are 3 characters long.
The problem is, not all languages do this.

French is a good example:
janv. févr. mars avril mai juin juil. août sept. oct. nov. déc.

Maybe strip the . at the end?
 That helps for some months, not all
Maybe take the first three characters?
 Several wide languages will have big issues
Maybe convert wide, get wcslen then use that.
 Even after that June "juin" and July "juil" are both "jui".

So, anything that uses the month (bsdstart,start) use ctime which
doesn't use locale. That solves the length issue.

stime does, which means it has this issue but its been like that
for years. You get stuff like this:

janv.13 482261
00:00 1151918
 2022 1458628
06:12 1957584

The only way to fix that would be to
 a)Make the field two characters longer
 b)Convert it back to ctime() which means everyone else
   loses.

This could have be oh-so easy if everyone made %b and %a three
(wide) characters everywhere.

References:
 procps-ng/procps#228
 procps-ng/procps#226

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-01-18 17:46:06 +11:00
Craig Small
bfe65a2cce docs: Cleanup vmstat.8
Made it follow the standard format and removed some cruft.
Added notes about you do need special permissions for some things
such as slabs.
2023-01-18 17:35:44 +11:00
Qin Fandong
0a5ccbdd42 vmstat: precision issues in unitConvert()
Fix conversion errors due to precision issues in function unitConvert

For example: unitConvert(98720620) will return 98720624, not 98720620.

Because we do (unsigned long)(float)98720620 in function unitConvert
and this is wrong! We should do (unsigned long)(double)98720620 here.

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

References:
 procps-ng/procps!75
2023-01-18 17:02:53 +11:00
Sanskriti Sharma
68e2c0fc53 vmstat: Fixed initial si,so,bi,bo,in & cs values
In the default display option, the first line of stats output in the
above mentioned columns was incorrect.

References:
 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=668580
 procps-ng/procps!74
 procps-ng/procps#15

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-01-18 16:56:24 +11:00