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>
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
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>
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>
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!125procps-ng/procps#190
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>
procps 3.3.17 the c option changed the command/args field
to cmd but this got removed as part of newlib
Functionality is back in with a test case.
References:
https://bugs.debian.org/1026326
Signed-off-by: Craig Small <csmall@dropbear.xyz>
The man page said it cannot show changes to comm, such as when you
use prctl(). In fact, ps can see this. The args field may not change
because its due to the path of the executable but comm can.
The field comm no longer shows defunct for zombie processes, use the
state field for this as it could be obscured if not the last
column anyhow.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
When the skill program was ported to the new API the code to filter
on PID, used by the -p option, was missed. It is now restored.
References:
https://bugs.debian.org/1025915
While ps used the correct type for PIDS_VM_RSS the test
did not. For some reason this only appeared to be an issue
for s390x
References:
https://bugs.debian.org/1025495
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Put the man-po pot file under version control like its po/*.pot sibling.
Makefile now auto-matically generates the list of man pages as they are
in a single directory. There were some missing!
pot file target is dependent on the untranslated man pages
When downloading from translation project, run po4a to sync the new
po files correctly.
Downloaded man po files from translation project and synched.
Thanks to @gorean for the info
References:
procps-ng/procps#258
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Thanks to @kabe-gl for this patch.
w command shows ????? for LOGIN@ column when compiled on 32bit environment with -D_TIME_BITS=64.
References:
#256
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Tracking what we do to the library so the N:N:N version strings are
updated. This is just a NEWS item for previous commit.
References:
commit b89e3230b2
The commit that changed configure.ac was supposed to check for when
someone removes ncurses using the flag --without-ncurses
Unfortunately the change didn't check if the user was specifying
--without or --with meaning if they didn use --with-ncurses the
configure script would error out.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
References:
commit 8128641814procps-ng/procps#251
Discovered this while trying to port programs that use the deleted
libprocps function look_up_our_self() which can be found with the
fatal_proc_unmounted() function.
While procps_pids_new() will allow you to specify any items you
care to think of, a subsequent call to fatal_proc_unmounted()
will only fill in the values found in /proc/self/stat.
Added a caveat to the procps_pids manpage pointing out this
limitation.
References:
https://salsa.debian.org/xorg-team/app/apitrace/-/blob/debian-unstable/lib/os/os_memory.hpp#L44https://gitlab.com/-/snippets/2377884
Signed-off-by: Craig Small <csmall@dropbear.xyz>
If procps is built on a Linux 5.3+ system then pidwait
is built with pidfd_open(). If that program is run on
a system < 5.3 then it gives an odd generic error.
If we get a ENOSYS from one pid, we will get it for all
the others so its better to explain what happens and terminate.
The man page is updated to note this issue.
This came up due to killall in psmisc using pidfd_send_signal
References:
https://bugs.debian.org/1015228
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Using localtime() can be a problem due to the static buffer for
the return value. It's simple enough to use localtime_r()
Signed-off-by: Craig Small <csmall@dropbear.xyz>
During the changes to procps_loadavg I didn't set the initial
value for retval, meaning it was a random number.
It is now correctly intialised to zero.
References:
commit 8fcd14de18
Now that the library correctly returns an error if loadavg
is not available, tload can tell the user the bad news.
References:
procps-ng/procps#227
commit 8fcd14de18
Signed-off-by: Craig Small <csmall@dropbear.xyz>
A library should generally return an error value, rather than
printing to stderr a message. procps_loadavg() had a few things
to change:
It had a global buffer, but we don't call this function over and
over except in tload. It also did had two macros where a plain
fopen() would do the job nicely.
This removed the macro FILE_TO_BUF which was used everywhere in oldlib
but only for loadavg in newlib.
This library change will set us up to fix tload.
When /proc is mounted with subset=pid free just gives the
standard cannot create meminfo structure without any hint why.
free now checks the return value and if it is -ENOENT then it
gives more information about the problem.
References:
procps-ng/procps#227
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Make the vmstat_read_failed() return non-error for Cygwin as
it always will error because /proc/vmstat doesn't exist.
Patch from Achim of the Cygwin project.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
pkg-config is used to find various libraries used by procps.
Unfortunately it, or rather automake, give terrible misleading
error messages if pkg-config is not installed.
At ./configure time you get this:
configure: error: ncurses support missing/incomplete (for partial
build use --without-ncurses)
At automake time you get this:
configure.ac:33: error: possibly undefined macro: AC_MSG_ERROR
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:48: error: possibly undefined macro: AS_IF
configure.ac:113: error: possibly undefined macro: AC_DEFINE
The internet is filled with such wonderful other examples.
This commit does two things:
At autoconf time, check PKG_PREREQ macro is defined which is found in
pkg.m4 and tells us pkg-config has its macros available.
At configure time, check the result of the pkg-config test and error
if it didn't find it.
Now it actually says its missing pkg-config. To be fair, the autoconf
check is "documented" and recommended in pkg.m4 file.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
The existing build system would only require wide ncurses for
a wide watch and even if the library was there would not link
anything else to it.
The first issue which #123 made me think of, is if ncursesw
was there and ncurses is not, why not use ncursesw?
A more major issue is if programs such as slabtop are linked
to ncurses, then certain languages will display their text
wrong, as found in #237.
The days of assuming ASCII only is ok are over the build system
now does the following:
1. If ncursesw is available use this for all relevant programs
2. If ncursesw is not but ncurses is, use this instead
3. If you enable 8bit watch and either disable ncurses or
we cannot find ncursesw error at configure time.
In related news, I hate M4sh.
References:
procps-ng/procps#123procps-ng/procps#237
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Merge request 154 brought up the issue of the space before the commar
after sigaction, however the MR included the translated generated
pages.
References:
procps-ng/procps!154
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Change the default name to cons%d
ctty can be used by other systems not just Cygwin so create a define
separate to cygwin for using the ctty function. The autoconf will need
to be updated to check for these specific systems in future.
Thanks to Achim of the Cygwin project for the patches.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
I'm not sure why you would roll your own macros for major and minor
while the standard includes have these defined. Using our versions
causes two problems:
- Some systems don't use this format for their minor/major
- If the kernel proc interface becomes a 64-bit number, like
dev_t is in the library, then our macro will need to be changed.
autoconf already had the check and as a bonus for anyone that
puts these definitions in sys/mkdev.h it handles that too.
So this is now the standard way of getting a minor/major number out of a
device id. Examining bits/sysmacros.h showed that their defines are
close to what devname.c had, except it can handle 64-bit numbers.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Stops the compilier (correctly) complaining:
lib/test_shm.c: In function ‘main’:
lib/test_shm.c:65:23: warning: format ‘%llx’ expects argument of type ‘long long unsigned int’, but argument 2 has type ‘int’ [-Wformat=]
65 | printf("SHMID: %llx\n", shm_id);
| ~~~^ ~~~~~~
| | |
| | int
| long long unsigned int
shm_id is an int which is what shmget() returns.
Strangely pmap has always scanned this in as a llx even though the maps
"inode" column is the same number that shmget() returns.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Previously the match for shmid was \d+ but the variable is printed
as a hex number, updated the regex to suit.
Added some changes for pmap test so if the test_shm process fails
we just skip past it.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
Created a test process test_shm that allocates a shared memory
segment and prints the segment ID. pmap testsuite runs pmap to
check that the segment is found.
The value returned by shmget() is the same value that is printed
in the fifth column /proc/<PID>/maps
Signed-off-by: Craig Small <csmall@dropbear.xyz>
pmap uses freopen to read /proc/self/maps. There doesn't
seem to be a good reason to do this and if pmap has its
stdin previously closed then it fails.
Signed-off-by: Craig Small <csmall@dropbear.xyz>
On Cygwin systems use a different file and format to get the
OS version.
Thanks to procps Cygwin maintainer Achim!
Signed-off-by: Craig Small <csmall@dropbear.xyz>
While the previous commit checked for a GNU environment so Hurd
compilied ok, this tripped up Cygwin. configure now explicitly tests
for the structure field rather than trying to guess through compilier
flags about what the environment tells us about signals.h
References:
commit d39d9db079
Signed-off-by: Craig Small <csmall@dropbear.xyz>
When the globbing update was put into sysctl, you could no longer
simply use the keys because one key could potentially be
multiple paths once the glob expansion occured. Using the path
instead gave a unique output.
Except certain programs, such as salt, expected the output to use
the dotted path "kernel.hostname" and not "kernel/hostname".
We can no longer use the original key, so now for each path:
Copy the path
strip off /proc/
convert all / to .
The sysctl testsuite was also updated to check for a few different
types of conversion failures.
References:
commit 6389deca5bhttps://www.freelists.org/post/procps/some-procpsn4400-fixes,4https://repo.saltproject.io/
Signed-off-by: Craig Small <csmall@dropbear.xyz>