Jim Warner
da06b8fa59
top: tweak forest view protections for forking anomaly
A recent commit eliminated the potential for a storage violation with forest view mode. It occurred when some program (erroneously?) created a lengthy forking loop. However, the associated commit message was misleading. The message implied that an unexpected order following a sort on start_time was the cause of storage overruns and a 'char' used to track nesting level only distorts the display when it goes negative. Actually, the truth is really just the opposite. Any start_time sort quirk causes no harm while that 'char' can yield corruption. Should some child end up sorted ahead of its parent by way of an extremely unlikely shared start_time the end result is such a child will be displayed unnested just like init or kthreadd along with all its own children. However, if nesting levels exceeded 255 (and became 0) a massive array overrun could be triggered when such a task and *all* its children were added to an array for the second time. Exactly how much storage was violated depended on the number of children that zeroed process had spawned (hinted at via either SIGSEGV or SIGABRT). The earlier commit limited nested levels to 100 so the root cause of the storage violation was already fixed. The potential for distorted nesting levels due to sort on start_time would seem to remain. But it's extremely unlikely that 2 tasks would share the same start_time. Even so, a new #define has been introduced which makes top impervious to the order of tasks such that a qsort is no longer necessary (providing an init/systemd task exists & was harvested as the first task by readproc). It can be utilized if distorted nesting ever becomes a real issue. But since there is a 5-10% performance hit with that, we'll continue using start_time as default. References(s): commit ce70017eb1927be51f73cbe0a0b4babcc502607e Signed-off-by: Jim Warner <james.warner@comcast.net>
…
…
…
…
…
…
…
…
COMPATIBILITY This code is intended for use with Linux 2.6.xx, 3.x and hopefully all future kernels. INSTALLATION If you are using git version of the project you need extra step. ./autogen.sh After that, and everyone using .tar.xz version of procps-ng, can do normal build. Read './configure --help' to select options for your needs. ./configure make make install If you have DejaGNU installed you can run optional test suite. make check HOW TO CONTRIBUTE See Documentation/BUGS file. PACKAGING If you are a downstream maintainer (packager) for a Linux distribution, please avoid causing troubles. This section applies to you. Avoid maintaining distribution specific patches. Send your patches to upstream, where they are at least reviewed, if not included. Please forward bug reports. If your bug database is public and busy enough to bother with, please make this known. Follow Debian's lead in making the bug database easy to comment on via email without need for an account. For normal packages, ensure that you do not add debugging flags to the CFLAGS variable. TRANSLATING MAN PAGES There is a three-step process for translating man pages. Most of the work happens in the man-po directory. make -C man-po translate-templates Creates the translation templates (the .pot files) for translators to use as a base. These, along with the tar file, should be sent to the tp-coorindator before release. make get-trans rsyncs the latest translated (.po) files for both the programs and man pages. make -C man-po translate-mans This is also called in the dist-hook and is where the translation magic happens. Take the original man page, the relevant .po file and produce a translated man page in that language. All of the man pages generated are found in man-po/(LANG)/man(SECTION)/ UPSTREAM & BUG REPORTS procps-ng <procps@freelists.org>
Description
Command line and full screen utilities for browsing procfs, a "pseudo" file system dynamically generated by Linux to provide information about the status of entries in its process table.
Languages
C
97.2%
Makefile
1%
Shell
0.9%
M4
0.9%