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>
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>
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>
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>
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>
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=1036631https://gitlab.com/procps-ng/procps/-/issues/279
Signed-off-by: Jim Warner <james.warner@comcast.net>
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
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>
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>
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>
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>
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>
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>
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>
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>
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>
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/173https://gitlab.com/procps-ng/procps/-/issues/274
. Mar 2023, avoid keystroke '%Cpu' distortions
commit 7e33fc47c6
Signed-off-by: Jim Warner <james.warner@comcast.net>
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>
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>
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>
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>
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/272procps-ng/procps#272
Signed-off-by: Jim Warner <james.warner@comcast.net>
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
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
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>
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>
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>
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>
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>
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#228procps-ng/procps#226
Signed-off-by: Craig Small <csmall@dropbear.xyz>
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