Commit Graph

3766 Commits

Author SHA1 Message Date
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
Justin Gottula
8a65a304e0 watch: Fix buggy line-deletion behaviour with --no-linewrap
This change is largely based upon Justin's patch, I just moved the
reset_ansi() parts out otherwise you get strange colour reset
behaviours.

Original patch message:
I used the --no-linewrap (-w) option for the first time today, watching
some wide output that didn't quite fit in my tmux pane. Quickly I
noticed a problem: while --no-linewrap did indeed eliminate the
spillover of lines too long for the terminal "window" width, it *also*
resulted in a bunch of lines from the program output being hidden
entirely.

After some fiddling around, the exact problematic behavior appears to be
as follows:
 1. Lines which would have wrapped (more than $COLUMNS chars long) are
    handled correctly.
 2. Lines which would *not* have wrapped (shorter than $COLUMNS) are
    printed; but then the next line is *not* printed! For long sequences
    of non-wrap-length lines, you get an every-other-line-is-visible
    sort of effect.

The logic underlying the problem seems to be this: in the run_command
loop, if the x loop goes all the way to completion (meaning we've
reached the right-side edge of the window area), there's a small block
of code for --no-linewrap whose main purpose is to call find_eol, which
eats input until it hits a newline (or EOF). Clearly this is intended to
be done for lines that are too long, so that the excess characters are
discarded and the input pointer is ready to go for the subsequent line.

However, this code isn't in any way conditional on the value of eolseen!
Short/wouldn't-wrap lines will have encountered a newline character
before exhausting the entire x loop, and therefore eolseen will be true.
Long/would-wrap lines will not have encountered a newline when the x
loop is exhausted, and so eolseen will be false.

Nevertheless, find_eol is called in *both* cases. For long lines, it
does what it's meant to do. For short lines, *the newline has already
been encountered and dealt with*, and so the actual effect of find_eol
is to eat the entirety of the next line, all the way through to its
newline, such that it isn't printed at all.

References:
 procps-ng/procps!157

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-01-18 16:46:52 +11:00
Craig Small
b2bfd76b06 watch: add -r to not rexec on terminal resize
If you have the watched program doing some other thing every time its
run and you resize the window, you might get unexpected results. The
-r option lets you run only when the interval has expired.

References:
 procps-ng/procps!125
 procps-ng/procps#190
2023-01-17 20:45:48 +11:00
Craig Small
5f4074a250 watch: Pass through bell
Based upon merge request 104, closes #174

References:
 procps-ng/procps!104
 procps-ng/procps#174
2023-01-17 16:59:00 +11:00
Craig Small
aa461df0a7 docs: Minor manpage fixes
References:
 procps-ng/procps#230
2023-01-16 18:29:50 +11:00
Craig Small
dbde44b528 doc: free.1 total memory doesn't include reserved memory
Updated the definition of total, because its not *all* of
the installed memory but close to it.

References:
 procps-ng/procps#247

Signed-off-by: Craig Small <csmall@dropbear.xyz>
2023-01-16 17:29:36 +11:00
Craig Small
647a2aa9e1 testsuite: Test for uptime --pretty
References:
 procps-ng/procps#263
2023-01-16 17:22:26 +11:00
Leonard Janis Robert König
d70879fb9c docs: Update drs description in ps.1 from top.1
References:
 procps-ng/procps!156
2023-01-15 15:37:49 +11:00
Craig Small
7b0c87f095 misc: Add NEWS for w --pids
References:
 commit 5baf1e6226
 procps-ng/procps!159
2023-01-15 15:19:38 +11:00
Jan Pazdziora
5baf1e6226 w: add --pids option to display the pid of the login and best processes. 2023-01-15 04:15:32 +00:00
Craig Small
3cfe83a25c misc: Add NEWS for pgrep -H
References:
 commit 866abacf88
 procps-ng/procps!165
2023-01-15 15:11:02 +11:00
Chris Down
866abacf88 pgrep: Support matching on the presence of a userspace signal handler
In production we've had several incidents over the years where a process
has a signal handler registered for SIGHUP or one of the SIGUSR signals
which can be used to signal a request to reload configs, rotate log
files, and the like. While this may seem harmless enough, what we've
seen happen repeatedly is something like the following:

1. A process is using SIGHUP/SIGUSR[12] to request some
   application-handled state change -- reloading configs, rotating a log
   file, etc;
2. This kind of request is deprecated and removed, so the signal handler
   is removed. However, a site where the signal might be sent from is
   missed (often logrotate or a service manager);
3. Because the default disposition of these signals is terminal, sooner
   or later these applications are going to be sent SIGHUP or similar
   and end up unexpectedly killed.

I know for a fact that we're not the only organisation experiencing
this: in general, signal use is pretty tricky to reason about and safely
remove because of the fairly aggressive SIG_DFL behaviour for some
common signals, especially for SIGHUP which has a particularly ambiguous
meaning. Especially in a large, highly interconnected codebase,
reasoning about signal interactions between system configuration and
applications can be highly complex, and it's inevitable that on occasion
a callsite will be missed.

In some cases the right call to avoid this will be to migrate services
towards other forms of IPC for this purpose, but inevitably there will
be some services which must continue using signals, so we need a safe
way to support them.

This patch adds support for the -H/--require-handler flag, which matches
on processes with a userspace handler present for the signal being sent.

With this flag we can enforce that all SIGHUP reload cases and SIGUSR
equivalents use --require-handler. This effectively mitigates the case
we've seen time and time again where SIGHUP is used to rotate log files
or reload configs, but the sending site is mistakenly left present after
the removal of signal handler, resulting in unintended termination of
the process.

Signed-off-by: Chris Down <chris@chrisdown.name>
2023-01-15 04:05:40 +00:00
Jim Warner
1db14dafd9 top: include the '5' toggle on the primary help screen
When the p/e-cores support (via the '5' key) was added
in the patch referenced below, I intentionally omitted
that key from the top primary help screen. This seemed
appropriate since it only applied to select Intel cpus
and, besides, that screen was getting kind of crowded.

[ it remains an objective to fit on a 80x24 terminal ]

Upon reflection, I found a way to squeeze it into that
help screen and have decided to included it. Hopefully
its presence will encourage use of top's new provision
on any Intel platforms that distinguish between cores.

Reference(s):
Sep, 2022 - exploit p/e-cores provision
commit 00f5c74b1b

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-01-15 15:02:39 +11:00
Jim Warner
28f44729da top: lessen overhead when 'bottom window' isn't active
In the commits referenced below special code was added
to make the bottom window sticky and fix the bug after
'Cap_nl_clreos' was traded for the 'Cap_clr_eol' loop.

However, there's always major overhead associated with
interacting with a terminal. So we'll only abandon the
single 'Cap_nl_clreos' putp in favor of repeated calls
with 'Cap_clr_eol' when a bottom window isn't present.

Reference(s):
. May, 2022 - bottom window batch bug fix
commit 793f3e85ae
. May, 2022 - bottom window made sticky
commit 0f2a755b0b

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-01-15 15:02:39 +11:00
Jim Warner
548c6a05ba top: tweak whitespace in some #defines for consistency
Please, do not look at the actual changes made by this
commit. Trust me they will vastly improve performance.

Signed-off-by: Jim Warner <james.warner@comcast.net>
2023-01-15 15:02:39 +11:00