Jim Warner [Sun, 25 Nov 2012 05:00:05 +0000 (00:00 -0500)]
top: add a flexible 'Inspect' capability
This commit introduces an extremely powerful, flexible
brand new capability. Now, users can pause the normal
iterative display and inspect the contents of any file
or output from any script, command, or even pipelines.
It's invoked via the 'Y' interactive command which, in
turn, is supported with simple user supplied additions
as new entries in the top personal configuration file.
A separate new 'Inspect' window supports scrolling and
searching, similar to the main top display. Except it
extends existing 'L'/'&' (locate/locate-next) commands
so that an out-of-view match automatically adjusts the
horizontal position bringing such data into view. And
it provides for multiple successive same line matches.
Also, the basic 'more/less' navigation keys are active
in this new 'Inspect' window, to ease user transition.
There are no program changes required when entries are
added to or deleted from the rcfile. And there are no
known limits to the complexity of a script, command or
pipeline, other than the unidirectional nature imposed
by the 'popen' function call which top cannot violate.
Since it's impossible to predict exactly what contents
will be generated, top treats all output as raw binary
data. Any control characters display in '^C' notation
while all other unprintable characters show as '<AB>'.
The biggest problem encountered was with the find/next
capability since that strstr guy was really diminished
given the possibility that numerous 'strings' could be
encountered *within* many of top's raw, binary 'rows'.
Oh, and another problem was in maintaining the perfect
left & right text justification of this commit message
along with all of the commit summaries. Some of those
summaries (like this very one) are of course, slightly
shorter, to make room for the 'man document' addition.
Enjoy!
Signed-off-by: Jim Warner <james.warner@comcast.net>
Jim Warner [Sun, 25 Nov 2012 05:00:03 +0000 (00:00 -0500)]
top: kill/nice provide for a default pid
As an aid to the above 2 commands, and as a prelude to
an upcoming 'inspect other output' capability, the act
of selecting a process for either has been simplified.
Positioning a task as the first one displayed, via the
up/down arrow keys, will now establish it as a default
selection for the appropriate command. Thus, that pid
will then be incorporated in a subsequent input prompt.
Signed-off-by: Jim Warner <james.warner@comcast.net>
Craig Small [Wed, 21 Nov 2012 11:11:17 +0000 (22:11 +1100)]
Add -c count option to pkill
Possibly by a side-effect but pkill -c option used to work which would
print the number of killed processes. This small change restores this
functionality.
Sami Kerola [Fri, 2 Nov 2012 17:50:58 +0000 (17:50 +0000)]
watch: fix compiler warnings
watch.c:255:14: warning: no previous declaration for 'get_time_usec' [-Wmissing-declarations]
watch.c:303:6: warning: no previous declaration for 'output_header' [-Wmissing-declarations]
watch.c:364:5: warning: no previous declaration for 'run_command' [-Wmissing-declarations]
Sami Kerola [Fri, 2 Nov 2012 17:50:56 +0000 (17:50 +0000)]
pmap: fix compiler warnings
pmap.c:80:7: warning: declaration of 'mapbuf' shadows a global declaration [-Wshadow]
pmap.c:63:13: warning: shadowed declaration is here [-Wshadow]
pmap.c:137:37: warning: declaration of 'mapbuf' shadows a global declaration [-Wshadow]
pmap.c:63:13: warning: shadowed declaration is here [-Wshadow]
Sami Kerola [Fri, 2 Nov 2012 17:50:55 +0000 (17:50 +0000)]
sysctl: fix compiler warnings
sysctl.c:293:5: warning: no previous declaration for 'is_deprecated' [-Wmissing-declarations]
sysctl.c:472:58: warning: declaration of 'pattern' shadows a global declaration [-Wshadow]
sysctl.c:67:14: warning: shadowed declaration is here [-Wshadow]
sysctl.c:650:7: warning: variable 'SwitchesAllowed' set but not used [-Wunused-but-set-variable]
Sami Kerola [Fri, 2 Nov 2012 17:50:54 +0000 (17:50 +0000)]
skill: fix compiler warnings
skill.c:340:5: warning: no previous declaration for 'skill_sig_option' [-Wmissing-declarations]
skill.c:460:5: warning: no previous declaration for 'snice_prio_option' [-Wmissing-declarations]
Sami Kerola [Fri, 2 Nov 2012 17:50:53 +0000 (17:50 +0000)]
lib/fileutils: fix compiler warnings
./lib/fileutils.c:9:5: warning: no previous declaration for 'close_stream' [-Wmissing-declarations]
./lib/fileutils.c:23:6: warning: no previous declaration for 'close_stdout' [-Wmissing-declarations]
Sami Kerola [Fri, 2 Nov 2012 17:50:52 +0000 (17:50 +0000)]
pgrep: fix compiler warnings
pgrep.c:195:12: warning: 'fcntl_lock' defined but not used [-Wunused-function]
pgrep.c:575:5: warning: no previous declaration for 'signal_option' [-Wmissing-declarations]
Sami Kerola [Fri, 2 Nov 2012 17:50:50 +0000 (17:50 +0000)]
pmap: use correct types for memory allocation
Fixes error which did not happen always. Changes of being affected by
the bug where greater the more there where pids defined as pmap argument.
The debian bug referral can almost certainly reproduce the problem,
especially when tried multiple times in row.
Reported-by: lee <lee@yun.yagibdah.de>
Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=688180 Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Mike Frysinger [Mon, 29 Oct 2012 22:47:05 +0000 (18:47 -0400)]
fix sysctl.conf inclusion in dist tarballs
If you configure w/out --enable-examples, then `make dist` doesn't
include sysctl.conf. Configure flags should not affect the tarball
produced by `make dist`, so explicitly list the conf in EXTRA_DIST.
An earlier commit improved the scroll coordinates
message performance by offloading most of the work
to those occasions when column headers were rebuilt.
The only remaining per-frame costs were the addition
of some terminfo escapes and the Frame_maxtask count.
This commit further reduces those per-frame costs to
the absolute minimum.
Jim Warner [Fri, 5 Oct 2012 20:15:15 +0000 (15:15 -0500)]
top: for performance, employ additional inlining
The 'refactor and enhance column width management'
recent redesign produced many subsequent benefits,
the latest of which is automatically sized fixed-width
non-scalable columns.
As expected, there was a cost associated with these
many enhancements. That cost has now been identified
as a 1-4% performance degradation, depending on which
fields are being displayed.
This increased cost arises principally from current
drawing related function calls, whereas top-3.3.3 did
most of its drawing via macros effectively inlining
those duties.
This commit inlines the equivalent drawing functions,
thus eliminating the function call penalty, and places
this top on a par with top-3.3.3. The trade off is a
modest additional 4k in executable size.
Signed-off-by: Jim Warner <james.warner@comcast.net>
Jim Warner [Wed, 3 Oct 2012 18:13:13 +0000 (13:13 -0500)]
top: 'X' command offers auto option
The recent introduction of a column widths override
(the 'X' command) provided for a user input amount
to be added to default field size which ranged from
5 to 10 bytes.
While that approach could prevent truncated data, the
different default sizes would almost certainly mean
some precious screen real estate was waisted.
This commit introduces the concept of dynamic widths
where top will add only enough to a field default to
prevent truncation for that specific field.
Now users have a choice between their explicit width
override or a width chosen by top to exactly match
display needs. The former is immediate but likely
wastes some horizontal space while the latter is
iterative but will be sized precisely.
Jim Warner [Mon, 1 Oct 2012 16:11:01 +0000 (11:11 -0500)]
top: map additional navigation keys
There were some gaps in the alternate navigation keys
top provided. Additionally, some inconsistencies
existed in the supporting key table.
This commit adds the following new key equivalents,
mirroring the standard vim navigation keys:
. ctrl+alt+ k = pgup, ctrl+alt+ j = pgdown
. ctrl+alt+ h = home, ctrl+alt+ l = end
Also, the supporting table entries now consistently
follow these "directions":
. up/pgup, down/pgdown, left/home, right/end
Signed-off-by: Jim Warner <james.warner@comcast.net>
Jim Warner [Mon, 1 Oct 2012 15:00:00 +0000 (10:00 -0500)]
top: avoid potential xterm state corruption
To support the cursor navigation keys, after saving
the termios structure top issues 'smkx/keypad_xmit'
during startup. However, some terminals appear to
treat that directive as persistent which leaves a
corrupted tty state after top exit.
This commit reverses the above terminal directive
via 'rmkx/keypad_local' just prior to restoring the
saved termios structure at program end.
For discovering this bug, and providing the 'rmkx'
clue to its solution, thanks to:
Kirill A. Shutemov <kirill@shutemov.name>
Signed-off-by: Jim Warner <james.warner@comcast.net>
Craig Small [Tue, 2 Oct 2012 11:56:38 +0000 (21:56 +1000)]
kill -PID fixed
Bug-Debian: http://bugs.debian.org/688731
kill would not permit negative PIDs and thought they were options. kill
now explicitly checks for unknown options and if they are numeric
assumes they are negative PIDs. The first negative PID stops any
further option processing.
Jim Warner [Tue, 25 Sep 2012 07:02:02 +0000 (02:02 -0500)]
top: with new 'X' command, WCHAN becomes fixed-width
This 'Sleeping in function' field was made variable
width because the length of current kernel symbols
usually exceeded the former top's 9 character limit.
As a variable width field it would steal valuable
horizontal display positions from other, more likely,
displayed fields such as COMMAND or CGROUPS.
With the advent of the new 'X' toggle, no fixed-width
non-scalable field need suffer permanent truncation.
Thus, WCHAN is being made fixed width with a default
size of 10 characters.
Signed-off-by: Jim Warner <james.warner@comcast.net>
top/top.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
Jim Warner [Fri, 21 Sep 2012 06:01:01 +0000 (01:01 -0500)]
top: optional wider non-scalable cols
This commit accommodates those fields which may have
suffered truncation due to these default limits:
. 5 digits for uid/gid type fields
. 8 characters for user/group type fields
With a new interactive command, users can increase the
width of all such fields, or return to the defaults.
Note:
There are no restrictions on the amount added to
the defaults. The user is free to vastly exceed
screen limits which simply means such fields can
never be displayed.
Signed-off-by: Jim Warner <james.warner@comcast.net>
Jim Warner [Wed, 19 Sep 2012 06:01:01 +0000 (01:01 -0500)]
top: refactor and enhance column width management
This commit accomplishes the following objectives:
* remove extra task_show parm added with 'Locate'
* avoid column overflow with subsequent misalignment
* eliminate spaces for column heading padding
* decouple column headings from column data formats
* eliminate all hardcoded column format specifiers
* generalize the inter-column spacing management
* remove Fieldstab.desc in favor of direct nls access
* set the stage for nls support of column headings
* set the stage for dynamic changes to justification
Signed-off-by: Jim Warner <james.warner@comcast.net>
When the maj_delta and min_delta fields were added to
the proc_t, they necessitated some compiler generated
padding bytes.
With this slight reordering, those padding bytes are
no longer generated. And since the original commit
already broke the library ABI, now is an opportune
time to correct that misalignment.
Jim Warner [Mon, 17 Sep 2012 20:30:45 +0000 (15:30 -0500)]
ps: favor truncation of long names over POSIX/UNIX standard
The UNIX and POSIX standards require that user and
group names be printed as decimal integers when there
is insufficient room. This has led to a constant
stream of bug reports.
With this commit, long names will be truncated and
displayed with a trailing visual clue.
To avoid truncation. the UNIX and POSIX way to change
column width is to rename the column:
ps -o pid,user=CumbersomeUserNames -o comm
The easy way is to directly specify the desired width:
ps -o pid,user:19,comm
Jim Warner [Sun, 26 Aug 2012 04:59:59 +0000 (23:59 -0500)]
top: implement a new approach to forest view mode
The TREE_RESCANS #define (formerly TREE_ONEPASS) has
been eliminated and the approach to forest view mode
redesigned. The chance of dangling children has been
eliminated and overhead reduced.
We now order processes on start_time (non-display)
and are therefore immune to any pid, ppid or tgid
anomalies when pid values wrap.
The new algorithm also accommodates any distortions
caused by the 3.3 kernel 'hidepid' provisions --
something guaranteed to produce dangling children
under the former approach.
Jim Warner [Sun, 1 Jul 2012 05:00:11 +0000 (00:00 -0500)]
library: add a single vector string choice for 'environ'
In preparation for top scrollable environment display,
the new flag PROC_EDITENVRCVT was added to mirror the
existing single vector string handling for cgroup and
cmdline.
Signed-off-by: Jim Warner <james.warner@comcast.net>
Jim Warner [Sat, 30 Jun 2012 05:00:22 +0000 (00:00 -0500)]
top: improve scroll coordinates message handling
With the introduction of intra-column scrolling, the
scroll coordinates message was enhanced to give some
hint of positioning within a scrolled column.
Rather than rebuild this somewhat costly string from
scratch with each frame, we'll now do the bulk of the
work only when column headers are constructed.
The only remaining per frame costs will then be the
addition of a few terminfo escapes and the current
Frame_maxtask count.
Signed-off-by: Jim Warner <james.warner@comcast.net>
Jim Warner [Sat, 30 Jun 2012 05:00:00 +0000 (00:00 -0500)]
top: add intra-column horizontal scrolling
This commit introduces horizontal scrolling within any
variable width column. Thus, an entire command line,
complete list of control groups, etc. can now be
viewed -- not just a screen width's portion.
It is activated when any variable width column:
. is (via field selection) or
. has become (via the right arrow key)
the only displayed field.
Then, the right and left arrow keys can be used in the
normal way to continue scrolling within that column.
The amount scrolled with each key press is currently
set as the normal tab stop increment of 8 characters.
Signed-off-by: Jim Warner <james.warner@comcast.net>
Jim Warner [Sat, 30 Jun 2012 04:59:59 +0000 (23:59 -0500)]
library: lift 1024 byte restriction on control groups
The control group hierarchies for any particular task
could conceivably grow quite large. However, the
library might impose an arbitrary limit of 1024 bytes
via fill_cgroup_cvt.
Two utility buffers of 128 KiB each were already
available for command line use. This commit simply
trades the smaller 1024 byte stack based buffers for
those much larger existing ones. Thus, truncation
can be avoided with no additional run-time costs.
Signed-off-by: Jim Warner <james.warner@comcast.net>
Jim Warner [Thu, 28 Jun 2012 05:00:01 +0000 (00:00 -0500)]
library: standardize handling of cgroup, supgid
Some inconsistencies have emerged during development
of support for these relatively new proc_t fields.
For example, a PROC_FILLCGROUP flag (via file2strvec)
could return NULL in cgroup whereas PROC_EDITCGRPCVT
(via fill_cgroup_cvt) *almost* guaranteed a return
address (as is true for PROC_EDITCMDLCVT and cmdline).
But even PROC_EDITCGRPCVT could return NULL if the
kernel version was less than 2.6.24. Then with NULL
ps would display a "-" while top would show "n/a".
And while unlikely, with the PROC_FILLSTATUS flag (via
status2proc) a NULL supgid address was theoretically
possible and both ps and top would then show "n/a".
This commit standardizes the following usage:
. PROC_FILLSTATUS (via status2proc)
guarantees a valid supgid address
representing either a true comma
delimited list or "-"
. PROC_FILLCGROUP plus
PROC_EDITCGRPCVT (via fill_cgroup_cvt)
guarantees a cgroup single vector
representing either a true control
group hierarchy or "-"
And as was true before, the following remains true:
PROC_FILLCOM or
PROC_FILLARG (via file2strvec)
may return a NULL cmdline pointer
. PROC_FILLCGROUP (via file2strvec)
may return a NULL cgroup pointer
. PROC_FILLCOM or
PROC_FILLARG plus
PROC_EDITCMDLCVT (via fill_cmdline_cvt)
guarantees a cmdline single vector
representing either a true command
line or a bracketed program name
. PROC_FILLSTATUS plus
PROC_FILLSUPGRP (via supgrps_from_supgids)
guarantees a valid supgrp address
representing either a true comma
delimited list or "-"
Signed-off-by: Jim Warner <james.warner@comcast.net>
Jim Warner [Tue, 26 Jun 2012 04:59:59 +0000 (23:59 -0500)]
ps: restore missing space when environment is displayed
This commit restores the missing space between command
lines and the environment when the later is being
displayed. Below is a brief history of that elusive
character.
commit bb4f08ba297a67a043f7547670aa8623b54c2e67
Date: Thu Aug 11 07:42:14 2011 +1000
The ps program was altered for improved args/comm
compliance. At this time, the needed space was
present due to a buglet in the new library
read_unvectored function used by fill_cmdline_cvt.
commit a5881b5a4e5056d13906ce6128f6aa180d67d60e
Date: Thu Dec 8 10:19:38 2011 -0600
The trailing space was eliminated so that the
file2strvec and fill_cmdline_cvt returned
command lines contained no trailing space.
However, this created a buglet when control group
hierarchies were displayed and the final cgroup
was empty.
This is also where the undetected ps buglet was
created.
commit c3a1239efee4d720080f216547be4cd22253f861
Date: Sun Dec 11 12:00:50 2011 -0600
The control group anomaly was fixed but the impact
on ps args/environ was still not detected.
Signed-off-by: Jim Warner <james.warner@comcast.net>
'si' and 'so' values depend on the result of the unitConvert
function where the output is a fixed-point size of kb_per_page
after the conversion. It gives 4 for kB units and 0 for MB units.
This also causes problems when switching between 'K' and 'k'
since the output value is 4 in both cases and the result for
'k' and 'K' then doesn't differ ... I swapped the conversion with
multiplication in order to make the number higher so it doesn't
lose precision. Since the unitConvert now accepts long instead
of int, I had to change the input type from int to long.
Craig Small [Sat, 30 Jun 2012 06:43:17 +0000 (16:43 +1000)]
Set the locale to C.
Some checks will fail due to different locales. For example 1.2 will
become 1,2 so the match fails. Problem reported by Alfredo Esteban
with fix suggested by Mike Frysinger
Craig Small [Tue, 26 Jun 2012 12:01:42 +0000 (22:01 +1000)]
Increase slab name from 64 to 128 characters
There soon will be slab types per cgroup meaning the name of the slab
will have the cgroup name in parathensis after the slab name. This
minor change increases the slab name size to cater for this.
pkill -3 <program> # worked
pkill <program> -3 # did not
This commit fixes the regression, without breaking option -u <numeric>
argument, assuming no-one is using negative numeric UID specifications
with space after -u && the argument. IMHO such use case is rare enough
to be broken.
Sami Kerola [Sun, 24 Jun 2012 10:51:18 +0000 (12:51 +0200)]
build-sys: earlier patch broke the build
The commit 47cc1b6ccfd1e6e10aafbf21e932991a10c97f7e might have fixed an
issue when distribution is built, but it broke make after running
./configure which this commit fixes.
Reference: http://www.delorie.com/gnu/docs/automake/automake_66.html Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Sami Kerola [Mon, 4 Jun 2012 07:42:50 +0000 (09:42 +0200)]
build-sys: do not assume $(top_srcdir)/.version file always exists
The issue was visible when trying to perform 'make distcheck'
without the .version file.
Reported-by: Craig Small <csmall@enc.com.au>
Reference: http://www.freelists.org/post/procps/watch-8bit-and-make-distcheck Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Jaromir Capik [Wed, 20 Jun 2012 12:19:14 +0000 (22:19 +1000)]
Rework of the -i feature
This version detects IPv6 address in the host field
and also IPv6 link interface separated by % sign.
It also handles unprintable characters and spaces better
than the previous one.
Craig Small [Sun, 17 Jun 2012 08:19:48 +0000 (18:19 +1000)]
minor fix for -u fix
Commit a5d9c40262c2f5f917d5f27c5f052bdbe7066ac1 had one small problem.
In that function its *argc not argc. This stops pgrep with no commands
from segfaulting, thankyou dejagnu!!
Andrej Kruták [Thu, 14 Jun 2012 12:33:49 +0000 (22:33 +1000)]
Fix pwdx argument parsing
On some architectures/gcc's, the pwdx tool doesn't compile right
because of bad type of a variable. Afterwards pwdx can't be
persuaded to work. Use int as the type, like the other tools
(like pgrep) do.
Fix the build where it seems a code fix for Linux was likely untested
on other systems.
Define SCHED_BATCH in test-schedbatch, for systems that don't have it;
the corresponding RH BZ#741090 patch used the magic value 3 in output.c
anyway.
Sami Kerola [Tue, 29 May 2012 19:39:57 +0000 (21:39 +0200)]
watch: fix to backporting error, and other wide character issues
The commit 8967f0fca3ab53479071a01f1522a19517ecb9cd has an typo like
error, which I must have done. The Bug-Debian 240989 did not have 12
but 128. Rest of the fixes are from Bug-Debian 675069 e.g. missing
include added, and usage of iswprint().
Bug-Debian: http://bugs.debian.org/240989
Bug-Debian: http://bugs.debian.org/675069 Reported-by: "Dr. David Alan Gilbert" <dave@treblig.org> Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Craig Small [Tue, 22 May 2012 10:50:34 +0000 (20:50 +1000)]
Removed bogus bogus -aux message
This message has been here for ages and either people ignore it because
they are so used to using -aux or never see it. It was here before 2005
and really 7 years is enought time to people to change their ways.
The notice is now removed, people who make usenames like "x" deserve all
the punishment they can get.
Craig Small [Sun, 20 May 2012 07:27:14 +0000 (17:27 +1000)]
Makefile.am fixes
Two problems.
1) skill/snice : distribution doesnt mean install
If you don't set your configure flags right, you dont install the
skill/snice man pages which means you will break any subsequent compiles
with the flags enabled. Man pages not to be installed should still be
distributed.
2) The git version into Makefile.am breaks under certain conditions.
The easy break for this is:
touch aclocal.m4
make
We need this script added plus some dist hook magic that got left out.