Use ncurses-{libs,devel} everywhere and bumprev for ABI change.

This commit is contained in:
Juan RP 2011-02-27 14:53:02 +01:00
parent 0cfd33b8f4
commit 9b73c60de2
133 changed files with 913 additions and 5950 deletions

View file

@ -5,9 +5,9 @@ long_desc="${long_desc}
This package contains files for development, headers, static libs, etc."
revision=3
revision=4
Add_dependency run ncursesw-devel
Add_dependency run ncurses-devel
Add_dependency run libstdc++-devel
Add_dependency run aspell

View file

@ -1,7 +1,7 @@
# Template file for 'aspell'
pkgname=aspell
version=0.60.6
revision=3
revision=4
distfiles="ftp://ftp.gnu.org/gnu/${pkgname}/${pkgname}-${version}.tar.gz"
build_style=gnu_configure
configure_args="--enable-compile-in-filters"
@ -21,7 +21,7 @@ long_desc="
subpackages="$pkgname-devel"
Add_dependency run libgcc
Add_dependency run glibc
Add_dependency run ncursesw
Add_dependency run ncurses-libs
Add_dependency run libstdc++
Add_dependency full perl ">=0"
Add_dependency build ncursesw-devel
Add_dependency build ncurses-devel

View file

@ -2,6 +2,7 @@
pkgname=bash
_bash_patchlevel=000
_bash_distver=4.2
revision=1
#version=${_bash_distver}.${_bash_patchlevel}
version=${_bash_distver}
wrksrc=${pkgname}-${_bash_distver}

View file

@ -1,6 +1,7 @@
# Template file for 'cmake'
pkgname=cmake
version=2.8.2
revision=1
distfiles="http://www.cmake.org/files/v2.8/$pkgname-$version.tar.gz"
build_style=configure
configure_script=./bootstrap

View file

@ -2,6 +2,7 @@
pkgname=dialog
_distver=1.1
_date=20110118
revision=1
version=${_distver}.${_date}
wrksrc=${pkgname}-${_distver}-${_date}
distfiles="ftp://invisible-island.net/${pkgname}/${pkgname}-${_distver}-${_date}.tgz"
@ -18,6 +19,6 @@ long_desc="
guage box, checklist box, and radiolist box."
Add_dependency run glibc
Add_dependency run ncursesw
Add_dependency run ncurses-libs
Add_dependency build gettext
Add_dependency build ncursesw-devel
Add_dependency build ncurses-devel

View file

@ -1,6 +1,7 @@
# Template file for 'gdb'
pkgname=gdb
version=7.2
revision=1
distfiles="http://ftp.gnu.org/gnu/gdb/gdb-$version.tar.bz2"
build_style=gnu_configure
configure_args="--disable-nls"

View file

@ -5,6 +5,8 @@ long_desc="${long_desc}
This package contains the ${sourcepkg} shared libraries."
revision=1
Add_dependency run glibc
Add_dependency run ncurses-libs

View file

@ -1,6 +1,7 @@
# Template build file for 'gettext'.
pkgname=gettext
version=0.18.1.1
revision=1
distfiles="http://ftp.gnu.org/pub/gnu/$pkgname/$pkgname-$version.tar.gz"
build_style=gnu_configure
configure_args="--disable-java --disable-native-java --disable-csharp
@ -17,7 +18,6 @@ long_desc="
subpackages="$pkgname-devel $pkgname-libs"
Add_dependency run glibc
Add_dependency run ncurses-libs
Add_dependency run gettext-libs
Add_dependency run libgomp
Add_dependency build ncurses-devel

View file

@ -1,9 +1,9 @@
# Template file for 'grub'
pkgname=grub
revision=1
_distver=1.99
_patchver=rc1
version=${_distver}${_patchver}
revision=2
wrksrc="grub-${_distver}~${_patchver}"
distfiles="ftp://alpha.gnu.org/gnu/grub/grub-${_distver}~${_patchver}.tar.gz"
build_style=gnu_configure

View file

@ -5,7 +5,7 @@ long_desc="${long_desc}
This package contains files for development, headers, static libs, etc."
revision=1
revision=2
noverifyrdeps=yes
Add_dependency run db-devel

View file

@ -1,7 +1,7 @@
# Template file for 'heimdal'
pkgname=heimdal
version=1.3.1
revision=3
revision=4
distfiles="http://www.h5l.org/dist/src/$pkgname-$version.tar.gz"
build_style=gnu_configure
configure_args="--enable-shared=yes --without-x --datadir=/var/lib/heimdal

View file

@ -1,6 +1,7 @@
# Template file for 'htop'
pkgname=htop
version=0.9
revision=1
distfiles="${SOURCEFORGE_SITE}/$pkgname/$pkgname-$version.tar.gz"
build_style=gnu_configure
configure_args="--enable-unicode --enable-openvz --enable-vserver"
@ -12,5 +13,11 @@ long_desc="
application (for console or X terminals) and requires ncurses."
Add_dependency run glibc
Add_dependency run ncursesw
Add_dependency build ncursesw-devel
Add_dependency run ncurses-libs
Add_dependency build bison
Add_dependency build ncurses-devel
pre_configure()
{
sed -i 's|ncursesw/curses.h|curses.h|' RichString.h RichString.c configure
}

View file

@ -5,10 +5,10 @@ long_desc="${long_desc}
This package contains files for development, headers, static libs, etc."
revision=2
revision=3
Add_dependency run libstdc++-devel
Add_dependency run ncursesw-devel
Add_dependency run ncurses-devel
Add_dependency run hunspelll
do_install()

View file

@ -1,7 +1,7 @@
# Template file for 'hunspell'
pkgname=hunspell
version=1.2.8
revision=2
revision=3
distfiles="${SOURCEFORGE_SITE}/$pkgname/$pkgname-$version.tar.gz"
build_style=gnu_configure
configure_args="--with-ui"
@ -25,8 +25,8 @@ subpackages="$pkgname-devel"
Add_dependency run libgcc
Add_dependency run glibc
Add_dependency run libstdc++
Add_dependency run ncursesw
Add_dependency run ncurses-libs
Add_dependency build pkg-config
Add_dependency build bison
Add_dependency build libstdc++-devel
Add_dependency build ncursesw-devel
Add_dependency build ncurses-devel

View file

@ -5,11 +5,13 @@ long_desc="${long_desc}
This package contains files for development, headers, static libs, etc."
revision=1
Add_dependency run perl
Add_dependency run pkg-config
Add_dependency run glib-devel
Add_dependency run openssl-devel
Add_dependency run ncursesw-devel
Add_dependency run ncurses-devel
Add_dependency run irssi
do_install()

View file

@ -1,7 +1,7 @@
# Template build file for 'irssi'
pkgname=irssi
version=0.8.15
revision=1
revision=2
distfiles="http://www.irssi.org/files/$pkgname-$version.tar.bz2"
configure_args="--with-proxy --with-perl=module"
build_style=gnu_configure
@ -22,17 +22,11 @@ Add_dependency run glibc
Add_dependency run zlib
Add_dependency run glib
Add_dependency run libssl
Add_dependency run ncursesw
Add_dependency run ncurses-libs
Add_dependency build perl
Add_dependency build pkg-config
Add_dependency build zlib-devel
Add_dependency build glib-devel
Add_dependency build openssl-devel
Add_dependency build ncursesw-devel
pre_configure()
{
sed -i -e "s|/usr/include/ncurses|/usr/include/ncursesw|g" \
-e "s|-lncurses|-lncursesw|g" ${wrksrc}/configure
}
Add_dependency build ncurses-devel

View file

@ -5,6 +5,8 @@ long_desc="${long_desc}
This package contains files for development, headers, static libs, etc."
revision=1
Add_dependency run glibc-devel
Add_dependency run ncurses-devel
Add_dependency run lame

View file

@ -1,6 +1,7 @@
# Template file for 'lame'
pkgname=lame
version=3.98.4
revision=1
distfiles="${SOURCEFORGE_SITE}/lame/lame-${version}.tar.gz"
build_style=gnu_configure
configure_args="--enable-nasm --enable-shared"

View file

@ -1,7 +1,7 @@
# Template file for 'less'
pkgname=less
version=436
revision=2
revision=3
distfiles="http://www.greenwoodsoftware.com/less/less-$version.tar.gz"
build_style=gnu_configure
short_desc="Pager program similar to more(1)"
@ -16,5 +16,5 @@ long_desc="
terminals. There is even limited support for hardcopy terminals."
Add_dependency run glibc
Add_dependency run ncursesw
Add_dependency build ncursesw-devel
Add_dependency run ncurses-libs
Add_dependency build ncurses-devel

View file

@ -1,6 +1,7 @@
# Template file for 'lftp'
pkgname=lftp
version=4.1.3
revision=1
distfiles="http://ftp.yars.free.net/pub/source/lftp/lftp-$version.tar.bz2"
build_style=gnu_configure
configure_args="--with-modules --disable-rpath --without-included-regex

View file

@ -5,7 +5,7 @@ long_desc="${long_desc}
This package contains files for development, headers, static libs, etc."
revision=1
revision=2
Add_dependency run ncurses-devel
Add_dependency run libcddb-devel

View file

@ -1,7 +1,7 @@
# Template file for 'libcdio'
pkgname=libcdio
version=0.82
revision=2
revision=3
distfiles="http://ftp.gnu.org/gnu/libcdio/$pkgname-$version.tar.gz"
build_style=gnu_configure
short_desc="CD-ROM access library"

View file

@ -6,10 +6,12 @@ long_desc="${long_desc}
This package includes the client binaries and the additional tools
innotop and mysqlreport."
revision=1
Add_dependency run libgcc
Add_dependency run glibc
Add_dependency run libstdc++
Add_dependency run ncursesw
Add_dependency run ncurses-libs
Add_dependency run libmysqlclient
Add_dependency run zlib
Add_dependency run tcp_wrappers-libs

View file

@ -6,10 +6,12 @@ long_desc="${long_desc}
This package includes the binaries for the MySQL NDB (Network Database)
component."
revision=1
Add_dependency run libgcc
Add_dependency run glibc
Add_dependency run libstdc++
Add_dependency run ncursesw
Add_dependency run ncurses-libs
Add_dependency run zlib
Add_dependency run readline

View file

@ -50,7 +50,7 @@ Add_dependency run mysql-client
Add_dependency build libstdc++-devel
Add_dependency build zlib-devel
Add_dependency build tcp_wrappers-devel
Add_dependency build ncursesw-devel
Add_dependency build ncurses-devel
Add_dependency build openssl-devel
Add_dependency build readline-devel
Add_dependency full perl ">=0"

View file

@ -1,6 +1,7 @@
# Template file for 'parted'
pkgname=parted
version=2.3
revision=1
distfiles="http://ftp.gnu.org/gnu/parted/parted-$version.tar.xz"
build_style=gnu_configure
configure_args="--without-included-regex --with-gnu-ld

View file

@ -1,6 +1,7 @@
# Template file for 'powertop'
pkgname=powertop
version=1.97
revision=1
distfiles="http://www.kernel.org/pub/linux/status/$pkgname/$pkgname-$version.tar.bz2"
build_style=gnu_makefile
short_desc="Linux tool to find out what is using power on a laptop"
@ -24,10 +25,10 @@ Add_dependency run libstdc++
Add_dependency run libnl
Add_dependency run pciutils
Add_dependency run zlib
Add_dependency run ncursesw
Add_dependency run ncurses-libs
Add_dependency build libnl-devel
Add_dependency build pciutils-devel
Add_dependency build zlib-devel
Add_dependency build gettext
Add_dependency build ncursesw-devel
Add_dependency build ncurses-devel

View file

@ -1,62 +0,0 @@
Author: <csmall@debian.org>
Description: ps.1 normal indent widths
pri field explained
--no-heading comment is an alias for --no-headers
Removed setproctitle(1) reference
Bug-Debian: http://bugs.debian.org/465761
Bug-Debian: http://bugs.debian.org/529045
Index: b/ps/ps.1
===================================================================
--- a/ps/ps.1 2009-11-24 20:53:06.000000000 +1100
+++ b/ps/ps.1 2009-11-24 21:00:31.000000000 +1100
@@ -18,19 +18,13 @@
.nh
.if n .ss 12 0
.\"
-.\" See /usr/share/groff/current/tmac/an-old.tmac for what these do.
-.\" Setting them to zero provides extra space, but only do that for
-.\" plain text output. PostScript and such will remain indented.
-.if n .nr IN 0n
-.if n .nr an-prevailing-indent 0n
-.\"
.\"
.\" ColSize is used for the format spec table.
.\" It's the left margin, minus the right, minus
.\" the space needed for the 1st two columns.
.\" Making it messy: inches, ens, points, scaled points...
.\"
-.nr ColSize ((\n(.lu-\n(.iu/\n(.Hu-20u)n)
+.nr ColSize ((\n(.lu-\n(.iu/\n(.Hu-26u)n)
.\"
.\" This is for command options
.nr OptSize (16u)
@@ -499,7 +493,7 @@
.opt c
Show the true command name. This is derived from the name of the
executable file, rather than from the argv value. Command arguments
-and any modifications to them (see\ \fIsetproctitle\fR(3)) are
+and any modifications to them are
thus not shown. This option
effectively turns the \fBargs\fR format keyword into the \fBcomm\fR
format keyword; it is useful with the \fB\-f\fR format option and with
@@ -588,7 +582,8 @@
repeat header lines, one per page of output
.opt \-\-no\-headers
-print no header line at all
+print no header line at all. \-\-no\-heading is an alias for this
+option.
.opt \-\-lines \ n
set screen height
@@ -1159,6 +1154,10 @@
parent process ID.
T}
+pri PRI T{
+priority of the process. Higher number means lower priority
+T}
+
psr PSR T{
processor that process is currently assigned to.
T}

View file

@ -1,19 +0,0 @@
Author: <hesso@hesso.pool.math.tu-berlin.de>
Description: Complain when /proc/version cannot be found instead of
exiting silently.
Index: b/proc/version.c
===================================================================
--- a/proc/version.c 2009-11-24 21:00:44.000000000 +1100
+++ b/proc/version.c 2009-11-24 21:00:46.000000000 +1100
@@ -39,8 +39,10 @@
FILE *fp;
char buf[256];
- if ( (fp=fopen("/proc/version","r")) == NULL) /* failure implies impending death */
+ if ( (fp=fopen("/proc/version","r")) == NULL) {
+ fprintf(stderr, "Cannot find /proc/version - is /proc mounted?\n");
exit(1);
+ }
if (fgets(buf, 256, fp) == NULL) {
fprintf(stderr, "Cannot read kernel version from /proc/version\n");
fclose(fp);

View file

@ -1,108 +0,0 @@
Description: Several bugs fixed for the free manpage:
-g flag documented #286900
hypen escaped #282168
Reformated completely #534198
free -o better documented #526604
Bug-Debian: http://bugs.debian.org/286900
Bug-Debian: http://bugs.debian.org/282168
Bug-Debian: http://bugs.debian.org/534198
Bug-Debian: http://bugs.debian.org/526604
Author: <csmall@debian.org>
--- a/free.1
+++ b/free.1
@@ -1,47 +1,67 @@
.\" -*-Nroff-*-
.\" This page Copyright (C) 1993 Matt Welsh, mdw@sunsite.unc.edu.
.\" Freely distributable under the terms of the GPL
-.TH FREE 1 "20 Mar 1993 " "Cohesive Systems" "Linux User's Manual"
+.TH FREE 1 "5 Oct 2009 " "Cohesive Systems" "Linux User's Manual"
.SH NAME
free \- Display amount of free and used memory in the system
.SH SYNOPSIS
-.BR "free " [ "\-b" " | " "\-k" " | " "\-m" "] [" "\-o" "] [" "\-s"
-.I delay
-.RB "] [" "\-t" "] [" "\-V" ]
+.B free
+.RB [ \-b | \-k | \-m | \-g ]
+.RB [ \-c
+.IR count ]
+.RB [ \-l ]
+.RB [ \-o ]
+.RB [ \-t ]
+.RB [ \-s
+.IR delay ]
+.RB [ \-V ]
.SH DESCRIPTION
\fBfree\fP displays the total amount of free and used physical and swap
memory in the system, as well as the buffers used by the kernel.
The shared memory column should be ignored; it is obsolete.
-.SS Options
-The \fB-b\fP switch displays the amount of memory in bytes; the
-\fB-k\fP switch (set by default) displays it in kilobytes; the \fB-m\fP
-switch displays it in megabytes.
-.PP
-The \fB-t\fP switch displays a line containing the totals.
-.PP
-The \fB-o\fP switch disables the display of a "buffer adjusted" line.
-If the -o option is not specified, \fBfree\fP subtracts buffer memory
-from the used memory and adds it to the free memory reported.
-.PP
-The \fB-s\fP switch activates continuous polling \fIdelay\fP seconds apart. You
+.SS OPTIONS
+.TP
+\fB\-b\fR
+Display the amount of memory in bytes.
+.TP
+\fB\-c\fR \fIcount\fR
+Display the result \fIcount\fR times. Requires the \fB\-s\fR option.
+.TP
+\fB\-g\fR
+Display the amount of memory in gigabytes.
+.TP
+\fB\-k\fR
+Display the amount of memory in kilobytes. This is the default.
+.TP
+\fB\-l\fR
+Show detailed low and high memory statistics.
+.TP
+\fB\-m\fR
+Display the amount of memory in megabytes.
+.TP
+\fB\-o\fR
+Display the output in old format, the only difference being this option
+will disable the display of the "buffer adjusted" line.
+.TP
+\fB\-s\fR
+Continuously display the result \fIdelay\fP seconds apart. You
may actually specify any floating point number for \fIdelay\fP,
.BR usleep (3)
is used for microsecond resolution delay times.
-.PP
-The \fB\-V\fP displays version information.
+.TP
+\fB\-t\fR
+Display a line showing the column totals.
+.TP
+\fB\-V\fR
+Display version information.
.SH FILES
-.ta
-.IR /proc/meminfo "\-\- memory information"
+.nf
+/proc/meminfo memory information
.fi
-
-.SH "SEE ALSO"
-.BR ps (1),
-.BR slabtop (1),
-.BR vmstat (8),
-.BR top(1)
-
.SH AUTHORS
Written by Brian Edmonds.
Send bug reports to <albert@users.sf.net>
-
+.SH "SEE ALSO"
+.BR ps "(1), " slabtop "(1), " top "(1), " vmstat (8).
+.\"{{{}}}

View file

@ -1,36 +0,0 @@
Author: <csmall@debian.org>
Description: Rework version parsing so its ok with other OSes
Index: b/proc/version.c
===================================================================
--- a/proc/version.c 2009-11-24 20:53:02.000000000 +1100
+++ b/proc/version.c 2009-11-24 21:00:44.000000000 +1100
@@ -35,15 +35,23 @@
static void init_Linux_version(void) __attribute__((constructor));
static void init_Linux_version(void) {
- static struct utsname uts;
int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */
+ FILE *fp;
+ char buf[256];
- if (uname(&uts) == -1) /* failure implies impending death */
- exit(1);
- if (sscanf(uts.release, "%d.%d.%d", &x, &y, &z) < 3)
+ if ( (fp=fopen("/proc/version","r")) == NULL) /* failure implies impending death */
+ exit(1);
+ if (fgets(buf, 256, fp) == NULL) {
+ fprintf(stderr, "Cannot read kernel version from /proc/version\n");
+ fclose(fp);
+ exit(1);
+ }
+ fclose(fp);
+ if (sscanf(buf, "Linux version %d.%d.%d", &x, &y, &z) < 3)
fprintf(stderr, /* *very* unlikely to happen by accident */
"Non-standard uts for running kernel:\n"
- "release %s=%d.%d.%d gives version code %d\n",
- uts.release, x, y, z, LINUX_VERSION(x,y,z));
+ "release %s=%d.%d.%d gives version code %d\n",
+ buf,
+ x, y, z, LINUX_VERSION(x,y,z));
linux_version_code = LINUX_VERSION(x, y, z);
}

View file

@ -0,0 +1,39 @@
diff -Naur procps-3.2.8-orig//top.1 procps-3.2.8/top.1
--- procps-3.2.8-orig//top.1 2010-11-19 00:43:13.000000000 -0500
+++ procps-3.2.8/top.1 2010-11-19 00:44:06.000000000 -0500
@@ -42,7 +42,7 @@
.ds EM \ \fB\-\-\ \fR
\# - these two are for chuckles, makes great grammar
.ds Me top
-.ds ME \fBtop\fR
+.ds MM \fBtop\fR
\# - other misc strings for consistent usage/emphasis
.ds F \fIOff\fR
.ds O \fIOn\fR
@@ -85,7 +85,7 @@
.\" ----------------------------------------------------------------------
.SH SYNOPSIS
.\" ----------------------------------------------------------------------
-\*(ME \-\fBhv\fR | \-\fBbcHisS\fR \-\fBd\fI delay\fR \-\fBn\fI
+\*(MM \-\fBhv\fR | \-\fBbcHisS\fR \-\fBd\fI delay\fR \-\fBn\fI
iterations\fR \-\fBp\fI pid\fR [,\fI pid\fR ...]
The traditional switches '-' and whitespace are optional.
@@ -94,7 +94,7 @@
.\" ----------------------------------------------------------------------
.SH DESCRIPTION
.\" ----------------------------------------------------------------------
-The \*(ME program provides a dynamic real-time view of a running system.
+The \*(MM program provides a dynamic real-time view of a running system.
It can display\fB system\fR summary information as well as a list of\fB
tasks\fR currently being managed by the Linux kernel.
The types of system summary information shown and the types, order and
@@ -104,7 +104,7 @@
The program provides a limited interactive interface for process
manipulation as well as a much more extensive interface for personal
configuration \*(EM encompassing every aspect of its operation.
-And while \*(ME is referred to throughout this document, you are free
+And while \*(MM is referred to throughout this document, you are free
to name the program anything you wish.
That new name, possibly an alias, will then be reflected on \*(Me's display
and used when reading and writing a \*(CF.

View file

@ -1,147 +0,0 @@
Author: Craig Small <csmall@debian.org>
Description: Fix kill.1 manual page
Changed may to cannot or might
Bug-Debian: http://bugs.debian.org/375739
Index: b/kill.1
===================================================================
--- a/kill.1 2009-11-24 20:53:04.000000000 +1100
+++ b/kill.1 2009-11-24 21:00:37.000000000 +1100
@@ -10,23 +10,18 @@
kill \- send a signal to a process
.SH SYNOPSIS
-.TS
-l l.
-kill pid ... Send SIGTERM to every process listed.
-kill -signal pid ... Send a signal to every process listed.
-kill -s signal pid ... Send a signal to every process listed.
-kill -l List all signal names.
-kill -L List all signal names in a nice table.
-kill -l signal Convert a signal number into a name.
-kill -V,--version Show version of program
-.TE
+\fBkill\fR [ \-\fBsignal\fR | \-s \fBsignal\fR ] \fBpid\fR ...
+.br
+\fBkill\fR [ \-L | -V, \-\-version ]
+.br
+\fBkill\fR \-l [ \fBsignal\fR ]
.SH DESCRIPTION
-The default signal for kill is TERM. Use -l or -L to list available signals.
+The default signal for kill is TERM. Use \-l or \-L to list available signals.
Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0.
-Alternate signals may be specified in three ways: -9 -SIGKILL -KILL.
+Alternate signals may be specified in three ways: \-9 \-SIGKILL \-KILL.
Negative PID values may be used to choose whole process groups; see the
-PGID column in ps command output. A PID of -1 is special; it indicates
+PGID column in ps command output. A PID of \-1 is special; it indicates
all processes except the kill process itself and init.
.SH SIGNALS
@@ -37,12 +32,11 @@
lB rB lB lB
lfCW r l l.
Name Num Action Description
-.TH
0 0 n/a exit code indicates if a signal may be sent
ALRM 14 exit
HUP 1 exit
INT 2 exit
-KILL 9 exit this signal may not be blocked
+KILL 9 exit cannot be blocked
PIPE 13 exit
POLL exit
PROF exit
@@ -50,15 +44,15 @@
USR1 exit
USR2 exit
VTALRM exit
-STKFLT exit may not be implemented
-PWR ignore may exit on some systems
+STKFLT exit might not be implemented
+PWR ignore might exit on some systems
WINCH ignore
CHLD ignore
URG ignore
-TSTP stop may interact with the shell
-TTIN stop may interact with the shell
-TTOU stop may interact with the shell
-STOP stop this signal may not be blocked
+TSTP stop might interact with the shell
+TTIN stop might interact with the shell
+TTOU stop might interact with the shell
+STOP stop cannot be blocked
CONT restart continue if stopped, otherwise ignore
ABRT 6 core
FPE 8 core
@@ -66,11 +60,11 @@
QUIT 3 core
SEGV 11 core
TRAP 5 core
-SYS core may not be implemented
-EMT core may not be implemented
-BUS core core dump may fail
-XCPU core core dump may fail
-XFSZ core core dump may fail
+SYS core might not be implemented
+EMT core might not be implemented
+BUS core core dump might fail
+XCPU core core dump might fail
+XFSZ core core dump might fail
.TE
.SH NOTES
@@ -79,36 +73,30 @@
the conflict.
.SH EXAMPLES
-
-.SS
-.B "kill -9 -1"
-.nf
+.TP
+.B kill \-9 \-1
Kill all processes you can kill.
-.fi
-.PP
-.SS
-.B "kill -l 11"
-.nf
+.TP
+.B kill \-l 11
Translate number 11 into a signal name.
-.fi
-.PP
-.SS
-.B "kill -L"
-.nf
+.TP
+.B kill -L
List the available signal choices in a nice table.
-.fi
-.PP
-.SS
-.B "kill 123 543 2341 3453"
-.nf
+.TP
+.B kill 123 543 2341 3453
Send the default signal, SIGTERM, to all those processes.
-.fi
-.PP
+
.SH "SEE ALSO"
-pkill(1) skill(1) kill(2) renice(1) nice(1) signal(7) killall(1)
+.BR pkill (1),
+.BR skill (1),
+.BR kill (2),
+.BR renice (1),
+.BR nice (1),
+.BR signal (7),
+.BR killall (1).
.SH STANDARDS
-This command meets appropriate standards. The -L flag is Linux-specific.
+This command meets appropriate standards. The \-L flag is Linux-specific.
.SH AUTHOR
Albert Cahalan <albert@users.sf.net> wrote kill in 1999 to replace a

View file

@ -1,25 +0,0 @@
Author: <csmall@debian.org>
Description: Add CR to warning line
Bug-Debian: http://bugs.debian.org/331419
Index: b/skill.c
===================================================================
--- a/skill.c 2009-11-24 21:00:31.000000000 +1100
+++ b/skill.c 2009-11-24 21:00:37.000000000 +1100
@@ -128,7 +128,7 @@
sprintf(buf, "/proc/%d/stat", pid); /* pid (cmd) state ppid pgrp session tty */
fd = open(buf,O_RDONLY);
if(fd==-1){ /* process exited maybe */
- if(pids && w_flag) printf("WARNING: process %d could not be found.",pid);
+ if(pids && w_flag) printf("WARNING: process %d could not be found.\n",pid);
return;
}
fstat(fd, &statbuf);
@@ -342,7 +342,7 @@
}else{
fprintf(stderr,
"Usage: snice [new priority] [options] process selection criteria\n"
- "Example: snice netscape crack +7\n"
+ "Example: snice +7 netscape crack \n"
"\n"
"The default priority is +4. (snice +4 ...)\n"
"Priority numbers range from +20 (slowest) to -20 (fastest).\n"

View file

@ -1,15 +0,0 @@
Author: Craig Small <csmall@debian.org>
Description: Added freeproc to library.map
Index: b/proc/library.map
===================================================================
--- a/proc/library.map 2009-11-24 20:53:03.000000000 +1100
+++ b/proc/library.map 2009-11-24 21:00:40.000000000 +1100
@@ -7,7 +7,7 @@
readproc; readtask; readproctab; readproctab2; look_up_our_self; escape_command;
escape_str; escape_strlist;
- openproc; closeproc;
+ openproc; closeproc; freeproc;
tty_to_dev; dev_to_tty; open_psdb_message; open_psdb; lookup_wchan;
display_version; procps_version; linux_version_code;
Hertz; smp_num_cpus; have_privs;

View file

@ -1,13 +0,0 @@
Author: <xaiki@gonzo>
Description: Make sure Makefile doesnt zot random files while checking GCC
--- a/Makefile
+++ b/Makefile
@@ -120,7 +120,7 @@
# Unlike the kernel one, this check_gcc goes all the way to
# producing an executable. There might be a -m64 that works
# until you go looking for a 64-bit curses library.
-check_gcc = $(shell if $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) dummy.c $(ALL_LDFLAGS) $(1) -o /dev/null $(CURSES) $(CURSESW) > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
+check_gcc = $(shell if $(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) dummy.c $(ALL_LDFLAGS) $(1) -o will_this_file_really_exist.tmp $(CURSES) $(CURSESW) > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ; rm -f will_this_file_really_exist.tmp)
# Be 64-bit if at all possible. In a cross-compiling situation, one may
# do "make m64=-m32 lib64=lib" to produce 32-bit executables. DO NOT

View file

@ -1,15 +0,0 @@
Author: Craig Small <csmall@debian.org>
Description: Made SHARED variable overwritable
Index: b/proc/module.mk
===================================================================
--- a/proc/module.mk 2009-11-24 20:53:04.000000000 +1100
+++ b/proc/module.mk 2009-11-24 21:00:38.000000000 +1100
@@ -17,7 +17,7 @@
# numbers for future use, the ELF soname can be set equal to the
# file name until some future date when a stable ABI is declared.
-SHARED := 1
+SHARED ?= 1
# for lib$(NAME).so and /usr/include/($NAME) and such
NAME := proc

View file

@ -1,93 +0,0 @@
Description: More ps time sorting
Author: Alfredo Esteban <aedelatorre@gmail.com>
Bug-Debian: http://bugs.debian.org/508435
Author: <csmall@debian.org>
Index: b/ps/output.c
===================================================================
--- a/ps/output.c 2009-11-24 20:53:06.000000000 +1100
+++ b/ps/output.c 2009-11-24 21:00:30.000000000 +1100
@@ -110,6 +110,20 @@
return (int)(P->NAME) - (int)(Q->NAME); \
}
+#define cook_time(P) (P->utime + P->stime) / Hertz
+
+#define cook_etime(P) seconds_since_boot - (unsigned long)(P->start_time / Hertz)
+
+#define CMP_COOKED_TIME(NAME) \
+static int sr_ ## NAME (const proc_t* P, const proc_t* Q) { \
+ unsigned long p_time,q_time; \
+ p_time=cook_ ##NAME (P); \
+ q_time=cook_ ##NAME (Q); \
+ if (p_time < q_time) return -1; \
+ if (p_time > q_time) return 1; \
+ return 0; \
+}
+
CMP_INT(rtprio)
CMP_SMALL(sched)
CMP_INT(cutime)
@@ -185,6 +199,9 @@
CMP_SMALL(state)
+CMP_COOKED_TIME(time)
+CMP_COOKED_TIME(etime)
+
/* approximation to: kB of address space that could end up in swap */
static int sr_swapable(const proc_t* P, const proc_t* Q) {
unsigned long p_swapable = P->vm_data + P->vm_stack;
@@ -408,7 +425,7 @@
unsigned long t;
unsigned dd,hh,mm,ss;
char *cp = outbuf;
- t = seconds_since_boot - (unsigned long)(pp->start_time / Hertz);
+ t = cook_etime(pp);
ss = t%60;
t /= 60;
mm = t%60;
@@ -476,7 +493,7 @@
unsigned long t;
unsigned dd,hh,mm,ss;
int c;
- t = (pp->utime + pp->stime) / Hertz;
+ t = cook_time(pp);
ss = t%60;
t /= 60;
mm = t%60;
@@ -1286,7 +1303,7 @@
{"alarm", "ALARM", pr_alarm, sr_alarm, 5, 0, LNX, AN|RIGHT},
{"argc", "ARGC", pr_nop, sr_nop, 4, 0, LNX, PO|RIGHT},
{"args", "COMMAND", pr_args, sr_cmd, 27, ARG, U98, PO|UNLIMITED}, /*command*/
-{"atime", "TIME", pr_time, sr_nop, 8, 0, SOE, ET|RIGHT}, /*cputime*/ /* was 6 wide */
+{"atime", "TIME", pr_time, sr_time, 8, 0, SOE, ET|RIGHT}, /*cputime*/ /* was 6 wide */
{"blocked", "BLOCKED", pr_sigmask, sr_nop, 9, 0, BSD, TO|SIGNAL}, /*sigmask*/
{"bnd", "BND", pr_nop, sr_nop, 1, 0, AIX, TO|RIGHT},
{"bsdstart", "START", pr_bsdstart, sr_nop, 6, 0, LNX, ET|RIGHT},
@@ -1305,7 +1322,7 @@
{"cp", "CP", pr_cp, sr_pcpu, 3, 0, DEC, ET|RIGHT}, /*cpu*/
{"cpu", "CPU", pr_nop, sr_nop, 3, 0, BSD, AN|RIGHT}, /* FIXME ... HP-UX wants this as the CPU number for SMP? */
{"cpuid", "CPUID", pr_psr, sr_nop, 5, 0, BSD, TO|RIGHT}, // OpenBSD: 8 wide!
-{"cputime", "TIME", pr_time, sr_nop, 8, 0, DEC, ET|RIGHT}, /*time*/
+{"cputime", "TIME", pr_time, sr_time, 8, 0, DEC, ET|RIGHT}, /*time*/
{"cstime", "-", pr_nop, sr_cstime, 1, 0, LNX, AN|RIGHT},
{"ctid", "CTID", pr_nop, sr_nop, 5, 0, SUN, ET|RIGHT}, // resource contracts?
{"cursig", "CURSIG", pr_nop, sr_nop, 6, 0, DEC, AN|RIGHT},
@@ -1320,7 +1337,7 @@
{"end_code", "E_CODE", pr_nop, sr_end_code, 8, 0, LNx, PO|RIGHT},
{"environ","ENVIRONMENT",pr_nop, sr_nop, 11, ENV, LNx, PO|UNLIMITED},
{"esp", "ESP", pr_esp, sr_kstk_esp, 8, 0, LNX, TO|RIGHT},
-{"etime", "ELAPSED", pr_etime, sr_nop, 11, 0, U98, ET|RIGHT}, /* was 7 wide */
+{"etime", "ELAPSED", pr_etime, sr_etime, 11, 0, U98, ET|RIGHT}, /* was 7 wide */
{"euid", "EUID", pr_euid, sr_euid, 5, 0, LNX, ET|RIGHT},
{"euser", "EUSER", pr_euser, sr_euser, 8, USR, LNX, ET|USER},
{"f", "F", pr_flag, sr_flags, 1, 0, XXX, ET|RIGHT}, /*flags*/
@@ -1463,7 +1480,7 @@
{"tdev", "TDEV", pr_nop, sr_nop, 4, 0, XXX, AN|RIGHT},
{"thcount", "THCNT", pr_nlwp, sr_nlwp, 5, 0, AIX, PO|RIGHT},
{"tid", "TID", pr_thread, sr_tid, 5, 0, AIX, TO|PIDMAX|RIGHT},
-{"time", "TIME", pr_time, sr_nop, 8, 0, U98, ET|RIGHT}, /*cputime*/ /* was 6 wide */
+{"time", "TIME", pr_time, sr_time, 8, 0, U98, ET|RIGHT}, /*cputime*/ /* was 6 wide */
{"timeout", "TMOUT", pr_nop, sr_nop, 5, 0, LNX, AN|RIGHT}, // 2.0.xx era
{"tmout", "TMOUT", pr_nop, sr_nop, 5, 0, LNX, AN|RIGHT}, // 2.0.xx era
{"tname", "TTY", pr_tty8, sr_tty, 8, 0, DEC, PO|LEFT},

View file

@ -1,76 +0,0 @@
Author: Madhusudan.C.S <madhusudancs@gmail.com>
Description: Uses alloc instead of fixed PATH_MAX value
Bug-Debian: http://bugs.debian.org/496274
Index: b/proc/readproc.c
===================================================================
--- a/proc/readproc.c 2009-11-24 21:00:41.000000000 +1100
+++ b/proc/readproc.c 2009-11-24 21:00:44.000000000 +1100
@@ -1036,7 +1036,7 @@
* and filled out proc_t structure.
*/
proc_t * get_proc_stats(pid_t pid, proc_t *p) {
- static char path[PATH_MAX], sbuf[1024];
+ static char path[32], sbuf[1024];
struct stat statbuf;
sprintf(path, "/proc/%d", pid);
Index: b/pwdx.c
===================================================================
--- a/pwdx.c 2009-11-24 20:53:02.000000000 +1100
+++ b/pwdx.c 2009-11-24 21:00:44.000000000 +1100
@@ -35,7 +35,6 @@
int main(int argc, char* argv[])
{
- char buf[PATH_MAX+1];
regex_t re;
int i;
@@ -59,6 +58,7 @@
for (i = 1; i < argc; i++) {
if (regexec(&re, argv[i], 0, NULL, 0) != 0) {
+ char buf[27 + strlen (argv[i]) + 1]; // Constant 27 is the length of the error string "pwdx: ... "
snprintf(buf, sizeof buf, "pwdx: invalid process id: %s\n", argv[i]);
die(buf);
}
@@ -68,9 +68,13 @@
regfree(&re);
+ int alloclen = 128;
+ char *pathbuf = malloc(alloclen);
+
for (i = 1; i < argc; i++) {
- char * s = buf;
+ char * s;
int len;
+ char buf[10 + strlen(argv[i]) + 1]; // Constant 10 is the length of strings "/proc/" + "/cwd" + 1
// At this point, all arguments are in the form /proc/nnnn
// or nnnn, so a simple check based on the first char is
@@ -82,14 +86,22 @@
// buf contains /proc/nnnn/cwd symlink name on entry, the
// target of that symlink on return
- if ((len = readlink(buf, buf, PATH_MAX)) < 0) {
+ while ((len = readlink(buf, pathbuf, alloclen)) == alloclen) {
+ alloclen *= 2;
+ pathbuf = realloc(pathbuf, alloclen);
+ }
+
+ if (len < 0) {
s = strerror(errno == ENOENT ? ESRCH : errno);
} else {
- buf[len] = 0;
+ pathbuf[len] = 0;
+ s = pathbuf;
}
printf("%s: %s\n", argv[i], s);
}
+ free(pathbuf);
+
return 0;
}

View file

@ -1,208 +0,0 @@
Author: <csmall@debian.org>
Description: Cleanup pgrep manual page #282168
Uses .BR for see also section #437678
Index: b/pgrep.1
===================================================================
--- a/pgrep.1 2009-11-24 21:00:45.000000000 +1100
+++ b/pgrep.1 2009-11-24 21:00:47.000000000 +1100
@@ -2,35 +2,39 @@
.\" Licensed under version 2 of the GNU General Public License.
.\" Copyright 2000 Kjetil Torgrim Homme
.\"
-.TH PGREP 1 "June 25, 2000" "Linux" "Linux User's Manual"
+.TH PGREP 1 "October 5, 2007" "Linux" "Linux User's Manual"
.SH NAME
pgrep, pkill \- look up or signal processes based on name and other attributes
.SH SYNOPSIS
-pgrep [\-cflvx] [\-d \fIdelimiter\fP] [\-n|\-o] [\-P \fIppid\fP,...] [\-g \fIpgrp\fP,...]
-.br
- [\-s \fIsid\fP,...] [\-u \fIeuid\fP,...] [\-U \fIuid\fP,...] [\-G \fIgid\fP,...]
-.br
- [\-t \fIterm\fP,...] [\fIpattern\fP]
-
-pkill [\-\fIsignal\fP] [\-fvx] [\-n|\-o] [\-P \fIppid\fP,...] [\-g \fIpgrp\fP,...]
-.br
- [\-s \fIsid\fP,...] [\-u \fIeuid\fP,...] [\-U \fIuid\fP,...] [\-G \fIgid\fP,...]
-.br
- [\-t \fIterm\fP,...] [\fIpattern\fP]
+.na
+\fBpgrep\fR [\fB\-cflvx\fR] [\fB\-d\ \fIdelimiter\fR] [\fB\-n\fR|\fB\-o\fR] \
+[\fB\-P\ \fIppid\fR,...] [\fB\-g\ \fIpgrp\fR,...] [\fB\-s\ \fIsid\fR,...] \
+[\fB\-u\ \fIeuid\fR,...] [\fB\-U\ \fIuid\fR,...] [\fB\-G\ \fIgid\fR,...] \
+[\fB\-t\ \fIterm\fR,...] [\fIpattern\fR]
+
+.HP
+\fBpkill\fR [\fB\-\fIsignal\fR] [\fB\-fvx\fR] [\fB\-n\fR|\fB\-o\fR] \
+[\fB\-P\ \fIppid\fR,...] [\fB\-g\ \fIpgrp\fR,...] [\fB\-s\ \fIsid\fR,...] \
+[\fB\-u\ \fIeuid\fR,...] [\fB\-U\ \fIuid\fR,...] [\fB\-G\ \fIgid\fR,...] \
+[\fB\-t\ \fIterm\fR,...] [\fIpattern\fR]
.SH DESCRIPTION
\fBpgrep\fP looks through the currently running processes and lists the
process IDs which matches the selection criteria to stdout. All
the criteria have to match. For example,
-pgrep -u root sshd
+.IP
+$ pgrep \-u root sshd
+.PP
will only list the processes called \fBsshd\fP AND owned by \fBroot\fP.
On the other hand,
-pgrep -u root,daemon
+.IP
+$ pgrep \-u root,daemon
+.PP
will list the processes owned by \fBroot\fP OR \fBdaemon\fP.
\fBpkill\fP will send the specified signal (by default \fBSIGTERM\fP)
@@ -38,18 +42,18 @@
.SH OPTIONS
.TP
-\-c
+\fB\-c\fR
Suppress normal output; instead print a count of matching processes.
.TP
-\-d \fIdelimiter\fP
+\fB\-d \fIdelimiter\fP
Sets the string used to delimit each process ID in the output (by
default a newline). (\fBpgrep\fP only.)
.TP
-\-f
+\fB\-f\fR
The \fIpattern\fP is normally only matched against the process name.
-When \-f is set, the full command line is used.
+When \fB\-f\fR is set, the full command line is used.
.TP
-\-g \fIpgrp\fP,...
+\fB\-g \fIpgrp\fP,...
Only match processes in the process group IDs listed. Process group 0
is translated into \fBpgrep\fP's or \fBpkill\fP's own process group.
.TP
@@ -57,40 +61,40 @@
Only match processes whose real group ID is listed. Either the
numerical or symbolical value may be used.
.TP
-\-l
+\fB\-l\fR
List the process name as well as the process ID. (\fBpgrep\fP only.)
.TP
-\-n
+\fB\-n\fR
Select only the newest (most recently started) of the matching
processes.
.TP
-\-o
+\fB\-o\fR
Select only the oldest (least recently started) of the matching
processes.
.TP
-\-P \fIppid\fP,...
+\fB\-P \fIppid\fP,...
Only match processes whose parent process ID is listed.
.TP
-\-s \fIsid\fP,...
+\fB\-s \fIsid\fP,...
Only match processes whose process session ID is listed. Session ID 0
is translated into \fBpgrep\fP's or \fBpkill\fP's own session ID.
.TP
-\-t \fIterm\fP,...
+\fB\-t \fIterm\fP,...
Only match processes whose controlling terminal is listed. The
terminal name should be specified without the "/dev/" prefix.
.TP
-\-u \fIeuid\fP,...
+\fB\-u \fIeuid\fP,...
Only match processes whose effective user ID is listed. Either the
numerical or symbolical value may be used.
.TP
-\-U \fIuid\fP,...
+\fB\-U \fIuid\fP,...
Only match processes whose real user ID is listed. Either the
numerical or symbolical value may be used.
.TP
-\-v
+\fB\-v\fR
Negates the matching.
.TP
-\-x
+\fB\-x\fR
Only match processes whose name (or command line if \-f is specified)
\fBexactly\fP match the \fIpattern\fP.
.TP
@@ -107,32 +111,40 @@
.SH EXAMPLES
Example 1: Find the process ID of the \fBnamed\fP daemon:
-unix$ pgrep \-u root named
+.IP
+$ pgrep \-u root named
+.PP
Example 2: Make \fBsyslog\fP reread its configuration file:
-unix$ pkill \-HUP syslogd
+.IP
+$ pkill \-HUP syslogd
+.PP
Example 3: Give detailed information on all \fBxterm\fP processes:
-unix$ ps \-fp $(pgrep \-d, \-x xterm)
+.IP
+$ ps \-fp $(pgrep \-d, \-x xterm)
+.PP
Example 4: Make all \fBnetscape\fP processes run nicer:
-unix$ renice +4 `pgrep netscape`
+.IP
+$ renice +4 `pgrep netscape`
.SH "EXIT STATUS"
+.PD 0
.TP
-.I "0"
+.I 0
One or more processes matched the criteria.
.TP
-.I "1"
+.I 1
No processes matched.
.TP
-.I "2"
+.I 2
Syntax error in the command line.
.TP
-.I "3"
+.I 3
Fatal error: out of memory etc.
.SH NOTES
@@ -144,13 +156,19 @@
itself as a match.
.SH BUGS
-The options \-n and \-o and \-v can not be combined. Let me know if
-you need to do this.
+The options \fB\-n\fP and \fB\-o\fP and \fB\-v\fP can not be combined.
+Let me know if you need to do this.
Defunct processes are reported.
.SH "SEE ALSO"
-ps(1) regex(7) signal(7) killall(1) skill(1) kill(1) kill(2)
+.BR ps (1),
+.BR regex (7),
+.BR signal (7),
+.BR killall (1),
+.BR skill (1),
+.BR kill (1),
+.BR kill (2)
.SH STANDARDS
\fBpkill\fP and \fBpgrep\fP were introduced in Sun's Solaris 7. This

View file

@ -1,85 +0,0 @@
Description: c option for pgrep for counting number of matched proceesses
Author: Craig Small <csmall@debian.org>
Bug-Debian: http://bugs.debian.org/375791
Index: b/pgrep.1
===================================================================
--- a/pgrep.1 2009-11-24 20:53:02.000000000 +1100
+++ b/pgrep.1 2009-11-24 21:00:45.000000000 +1100
@@ -7,7 +7,7 @@
pgrep, pkill \- look up or signal processes based on name and other attributes
.SH SYNOPSIS
-pgrep [\-flvx] [\-d \fIdelimiter\fP] [\-n|\-o] [\-P \fIppid\fP,...] [\-g \fIpgrp\fP,...]
+pgrep [\-cflvx] [\-d \fIdelimiter\fP] [\-n|\-o] [\-P \fIppid\fP,...] [\-g \fIpgrp\fP,...]
.br
[\-s \fIsid\fP,...] [\-u \fIeuid\fP,...] [\-U \fIuid\fP,...] [\-G \fIgid\fP,...]
.br
@@ -38,6 +38,9 @@
.SH OPTIONS
.TP
+\-c
+Suppress normal output; instead print a count of matching processes.
+.TP
\-d \fIdelimiter\fP
Sets the string used to delimit each process ID in the output (by
default a newline). (\fBpgrep\fP only.)
Index: b/pgrep.c
===================================================================
--- a/pgrep.c 2009-11-24 21:00:41.000000000 +1100
+++ b/pgrep.c 2009-11-24 21:00:45.000000000 +1100
@@ -54,6 +54,7 @@
static int opt_newest = 0;
static int opt_negate = 0;
static int opt_exact = 0;
+static int opt_count = 0;
static int opt_signal = SIGTERM;
static int opt_lock = 0;
static int opt_case = 0;
@@ -79,7 +80,7 @@
if (i_am_pkill)
fprintf (fp, "Usage: pkill [-SIGNAL] [-fvx] ");
else
- fprintf (fp, "Usage: pgrep [-flvx] [-d DELIM] ");
+ fprintf (fp, "Usage: pgrep [-cflvx] [-d DELIM] ");
fprintf (fp, "[-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]\n"
"\t[-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] "
"[PATTERN]\n");
@@ -565,7 +566,7 @@
strcat (opts, "ld:");
}
- strcat (opts, "LF:fnovxP:g:s:u:U:G:t:?V");
+ strcat (opts, "LF:cfnovxP:g:s:u:U:G:t:?V");
while ((opt = getopt (argc, argv, opts)) != -1) {
switch (opt) {
@@ -613,6 +614,9 @@
exit(EXIT_SUCCESS);
// case 'c': // Solaris: match by contract ID
// break;
+ case 'c':
+ opt_count = 1;
+ break;
case 'd': // Solaris: change the delimiter
opt_delim = strdup (optarg);
break;
@@ -724,10 +728,14 @@
procs[i].num, strerror (errno));
}
} else {
- if (opt_long)
- output_strlist(procs,num);
- else
- output_numlist(procs,num);
+ if (opt_count) {
+ fprintf(stdout, "%ld\n", num);
+ } else {
+ if (opt_long)
+ output_strlist (procs,num);
+ else
+ output_numlist (procs,num);
+ }
}
return !num; // exit(EXIT_SUCCESS) if match, otherwise exit(EXIT_FAILURE)
}

View file

@ -1,16 +0,0 @@
Author: Craig Small <csmall@debian.org>
Description: pgrep.c saved_start_time was missed
Index: b/pgrep.c
===================================================================
--- a/pgrep.c 2009-11-24 20:53:03.000000000 +1100
+++ b/pgrep.c 2009-11-24 21:00:41.000000000 +1100
@@ -430,7 +430,8 @@
preg = do_regcomp();
if (opt_newest) saved_start_time = 0ULL;
- if (opt_oldest) saved_start_time = ~0ULL;
+ else
+ saved_start_time = ~0ULL;
if (opt_newest) saved_pid = 0;
if (opt_oldest) saved_pid = INT_MAX;

View file

@ -1,15 +0,0 @@
Author: <hesso@pool.math.tu-berlin.de>
Description: Distinguish between invalid commandline parameters and '-?'.
Index: b/pgrep.c
===================================================================
--- a/pgrep.c 2009-11-24 21:00:45.000000000 +1100
+++ b/pgrep.c 2009-11-24 21:00:49.000000000 +1100
@@ -681,7 +681,7 @@
// case 'z': // Solaris: match by zone ID
// break;
case '?':
- usage (opt);
+ usage (optopt?optopt:opt);
break;
}
}

View file

@ -1,48 +0,0 @@
Description: Cleanup pmap.1 manual page
Author: Brendan O'Dea <bod@debian.org>
Bug-Debian: http://bugs.debian.org/282168
Reviewed-by: Craig Small <csmall@debian.org>
Index: b/pmap.1
===================================================================
--- a/pmap.1 2009-11-24 20:53:06.000000000 +1100
+++ b/pmap.1 2009-11-24 21:00:30.000000000 +1100
@@ -10,25 +10,29 @@
pmap \- report memory map of a process
.SH SYNOPSIS
-.nf
-pmap [ -x | -d ] [ -q ] pids...
-pmap -V
-.fi
+.B pmap
+.RB [ \-x | \-d ]
+.RB [ \-q ]
+.I pid
+\& ...
+.br
+.B pmap \-V
.SH DESCRIPTION
The pmap command reports the memory map of a process or processes.
.SH "GENERAL OPTIONS"
.TS
-l l l.
--x extended Show the extended format.
--d device Show the device format.
--q quiet Do not display some header/footer lines.
--V show version Displays version of program.
+lB l l.
+\-x extended Show the extended format.
+\-d device Show the device format.
+\-q quiet Do not display some header/footer lines.
+\-V show version Displays version of program.
.TE
.SH "SEE ALSO"
-ps(1) pgrep(1)
+.BR ps(1),
+.BR pgrep(1)
.SH STANDARDS
No standards apply, but pmap looks an awful lot like a SunOS command.

View file

@ -1,141 +0,0 @@
Description: provides information for pmap -x option
Similiar idea to pmap written by Robert Love
Bug-Debian: http://bugs.debian.org/347476
Bug-Debian: http://bugs.debian.org/505571
Author: Craig Small <csmall@debian.org>
--- a/pmap.c
+++ b/pmap.c
@@ -126,24 +126,37 @@
char buf[32];
char mapbuf[9600];
char cmdbuf[512];
+ FILE *fp;
unsigned long total_shared = 0ul;
unsigned long total_private_readonly = 0ul;
unsigned long total_private_writeable = 0ul;
+ char *cp2=NULL;
+ unsigned long long rss = 0ull;
+ unsigned long long private_dirty = 0ull;
+ unsigned long long shared_dirty = 0ull;
+ unsigned long long total_rss = 0ull;
+ unsigned long long total_private_dirty = 0ull;
+ unsigned long long total_shared_dirty = 0ull;
+
// Overkill, but who knows what is proper? The "w" prog
// uses the tty width to determine this.
int maxcmd = 0xfffff;
sprintf(buf,"/proc/%u/maps",p->tgid);
- if(!freopen(buf, "r", stdin)) return 1;
+ if ( (fp = fopen(buf, "r")) == NULL) return 1;
+ if (x_option) {
+ sprintf(buf,"/proc/%u/smaps",p->tgid);
+ if ( (fp = freopen(buf, "r", fp)) == NULL) return 1;
+ }
escape_command(cmdbuf, p, sizeof cmdbuf, &maxcmd, ESC_ARGS|ESC_BRACKETS);
printf("%u: %s\n", p->tgid, cmdbuf);
if(!q_option && (x_option|d_option)){
if(x_option){
- if(sizeof(KLONG)==4) printf("Address Kbytes RSS Anon Locked Mode Mapping\n");
- else printf("Address Kbytes RSS Anon Locked Mode Mapping\n");
+ if(sizeof(KLONG)==4) printf("Address Kbytes RSS Dirty Mode Mapping\n");
+ else printf("Address Kbytes RSS Dirty Mode Mapping\n");
}
if(d_option){
if(sizeof(KLONG)==4) printf("Address Kbytes Mode Offset Device Mapping\n");
@@ -151,12 +164,54 @@
}
}
- while(fgets(mapbuf,sizeof mapbuf,stdin)){
+ while(fgets(mapbuf,sizeof mapbuf,fp)){
char flags[32];
char *tmp; // to clean up unprintables
- unsigned KLONG start, end, diff;
+ unsigned KLONG start, end, diff=0;
unsigned long long file_offset, inode;
unsigned dev_major, dev_minor;
+ unsigned long long smap_value;
+ char smap_key[20];
+
+ /* hex values are lower case or numeric, keys are upper */
+ if (mapbuf[0] >= 'A' && mapbuf[0] <= 'Z') {
+ /* Its a key */
+ if (sscanf(mapbuf,"%20[^:]: %llu", smap_key, &smap_value) == 2) {
+ if (strncmp("Rss", smap_key, 3) == 0) {
+ rss = smap_value;
+ total_rss += smap_value;
+ continue;
+ }
+ if (strncmp("Shared_Dirty", smap_key, 12) == 0) {
+ shared_dirty = smap_value;
+ total_shared_dirty += smap_value;
+ continue;
+ }
+ if (strncmp("Private_Dirty", smap_key, 13) == 0) {
+ private_dirty = smap_value;
+ total_private_dirty += smap_value;
+ continue;
+ }
+ if (strncmp("Swap", smap_key, 4) == 0) { /*doesnt matter as long as last*/
+ printf(
+ (sizeof(KLONG)==8)
+ ? "%016"KLF"x %7lu %7llu %7llu %s %s\n"
+ : "%08lx %7lu %7llu %7llu %s %s\n",
+ start,
+ (unsigned long)(diff>>10),
+ rss,
+ (private_dirty + shared_dirty),
+ flags,
+ cp2
+ );
+ /* reset some counters */
+ rss = shared_dirty = private_dirty = 0ull;
+ continue;
+ }
+ /* Other keys */
+ continue;
+ }
+ }
sscanf(mapbuf,"%"KLF"x-%"KLF"x %31s %Lx %x:%x %Lu", &start, &end, flags, &file_offset, &dev_major, &dev_minor, &inode);
if(start > range_high)
@@ -186,16 +241,9 @@
flags[5] = '\0';
if(x_option){
- const char *cp = mapping_name(p, start, diff, mapbuf, 0, dev_major, dev_minor, inode);
- printf(
- (sizeof(KLONG)==8)
- ? "%016"KLF"x %7lu - - - %s %s\n"
- : "%08lx %7lu - - - %s %s\n",
- start,
- (unsigned long)(diff>>10),
- flags,
- cp
- );
+ cp2 = mapping_name(p, start, diff, mapbuf, 0, dev_major, dev_minor, inode);
+ /* printed with the keys */
+ continue;
}
if(d_option){
const char *cp = mapping_name(p, start, diff, mapbuf, 0, dev_major, dev_minor, inode);
@@ -232,10 +280,12 @@
if(!q_option){
if(x_option){
if(sizeof(KLONG)==8){
- printf("---------------- ------ ------ ------ ------\n");
+ printf("---------------- ------ ------ ------\n");
printf(
- "total kB %15ld - - -\n",
- (total_shared + total_private_writeable + total_private_readonly) >> 10
+ "total kB %15ld %7llu %7llu\n",
+ (total_shared + total_private_writeable + total_private_readonly) >> 10,
+ total_rss, (total_shared_dirty+total_private_dirty)
+
);
}else{
printf("-------- ------- ------- ------- -------\n");

View file

@ -1,37 +0,0 @@
Description: Call libproc constructors in strict order
Having one constructor depend on another means if the order is reversed
you get a different result. Patched based on idea by Tom Evans.
Bug-Debian: http://bugs.debian.org/460331
Author: Craig Small <csmall@debian.org>
--- a/proc/sysinfo.c
+++ b/proc/sysinfo.c
@@ -213,6 +213,7 @@
static void init_libproc(void) __attribute__((constructor));
static void init_libproc(void){
have_privs = check_for_privs();
+ init_Linux_version(); /* Must be called before we check code */
// ought to count CPUs in /proc/stat instead of relying
// on glibc, which foolishly tries to parse /proc/cpuinfo
//
--- a/proc/version.c
+++ b/proc/version.c
@@ -33,8 +33,7 @@
int linux_version_code;
-static void init_Linux_version(void) __attribute__((constructor));
-static void init_Linux_version(void) {
+void init_Linux_version(void) {
int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */
FILE *fp;
char buf[256];
--- a/proc/version.h
+++ b/proc/version.h
@@ -14,6 +14,7 @@
EXTERN_C_BEGIN
+void init_Linux_version(void); /* Get Linux version */
extern void display_version(void); /* display suite version */
extern const char procps_version[]; /* global buf for suite version */

View file

@ -0,0 +1,23 @@
diff -up procps-3.2.7/free.1.hlmem procps-3.2.7/free.1
--- procps-3.2.7/free.1.hlmem 2009-02-24 10:54:35.000000000 +0100
+++ procps-3.2.7/free.1 2009-02-24 11:00:26.000000000 +0100
@@ -7,7 +7,7 @@ free \- Display amount of free and used
.SH SYNOPSIS
.BR "free " [ "\-b" " | " "\-k" " | " "\-m" "] [" "\-o" "] [" "\-s"
.I delay
-.RB "] [" "\-t" "] [" "\-V" ]
+.RB "] [" "\-t" "] [" "\-l" "] [" "\-V" "]
.SH DESCRIPTION
\fBfree\fP displays the total amount of free and used physical and swap
memory in the system, as well as the buffers used by the kernel.
@@ -28,7 +28,9 @@ may actually specify any floating point
.BR usleep (3)
is used for microsecond resolution delay times.
.PP
-The \fB\-V\fP displays version information.
+The \fB-l\fP switch shows detailed low and high memory statistics.
+.PP
+The \fB\-V\fP switch displays version information.
.SH FILES
.ta
.IR /proc/meminfo "\-\- memory information"

View file

@ -0,0 +1,22 @@
--- procps-3.2.7/proc/readproc.c.kzak 2006-06-16 10:18:13.000000000 +0200
+++ procps-3.2.7/proc/readproc.c 2006-09-27 11:25:13.000000000 +0200
@@ -432,14 +432,17 @@
if(fd==-1) return NULL;
/* read whole file into a memory buffer, allocating as we go */
- while ((n = read(fd, buf, sizeof buf - 1)) > 0) {
+ while ((n = read(fd, buf, sizeof buf - 1)) >= 0) {
if (n < (int)(sizeof buf - 1))
end_of_file = 1;
- if (n == 0 && rbuf == 0)
+ if (n == 0 && rbuf == 0) {
+ close(fd);
return NULL; /* process died between our open and read */
+ }
if (n < 0) {
if (rbuf)
free(rbuf);
+ close(fd);
return NULL; /* read error */
}
if (end_of_file && buf[n-1]) /* last read char not null */

View file

@ -0,0 +1,12 @@
diff -up procps-3.2.7/ps/ps.1.ps-man-fmt procps-3.2.7/ps/ps.1
--- procps-3.2.7/ps/ps.1.ps-man-fmt 2008-09-01 11:43:18.000000000 +0200
+++ procps-3.2.7/ps/ps.1 2008-09-01 11:43:41.000000000 +0200
@@ -30,7 +30,7 @@
.\" the space needed for the 1st two columns.
.\" Making it messy: inches, ens, points, scaled points...
.\"
-.nr ColSize ((\n(.lu-\n(.iu/\n(.Hu-20u)n)
+.nr ColSize ((\n[.l] - \n[.i]) / 1n - 20)
.\"
.\" This is for command options
.nr OptSize (16u)

View file

@ -0,0 +1,22 @@
--- procps-3.2.7/ps/ps.1.psman 2007-06-20 08:30:47.000000000 +0200
+++ procps-3.2.7/ps/ps.1 2007-06-20 08:50:10.000000000 +0200
@@ -21,8 +21,8 @@
.\" See /usr/share/groff/current/tmac/an-old.tmac for what these do.
.\" Setting them to zero provides extra space, but only do that for
.\" plain text output. PostScript and such will remain indented.
-.if n .nr IN 0n
-.if n .nr an-prevailing-indent 0n
+.\" .if n .nr IN 0n
+.\" .if n .nr an-prevailing-indent 0n
.\"
.\"
.\" ColSize is used for the format spec table.
@@ -838,6 +838,8 @@
.\" lB1 lB1 lBw(5.5i)
.\" lB1 l1 l.
.\"
+.RE
+
.TS
expand;
lB1 lB1 lBw(\n[ColSize]n)

View file

@ -0,0 +1,113 @@
diff -up procps-3.2.7/slabtop.c.once procps-3.2.7/slabtop.c
--- procps-3.2.7/slabtop.c.once 2008-12-11 13:24:52.000000000 +0100
+++ procps-3.2.7/slabtop.c 2008-12-11 13:33:12.000000000 +0100
@@ -268,9 +268,24 @@ static void parse_input(char c)
}
}
+/*printw or printf depending on the context*/
+static void printwf(int once, const char *s,...)
+{
+va_list va;
+
+va_start(va,s);
+if(once)
+ vprintf(s,va);
+else
+ vwprintw(stdscr, s, va);
+va_end(va);
+}
+
+
int main(int argc, char *argv[])
{
int o;
+ int once = 0;
unsigned short old_rows;
struct slab_info *slab_list = NULL;
@@ -307,6 +322,7 @@ int main(int argc, char *argv[])
break;
case 'o':
delay = 0;
+ once = 1;
break;
case 'V':
display_version();
@@ -322,12 +338,18 @@ int main(int argc, char *argv[])
if (tcgetattr(0, &saved_tty) == -1)
perror("tcgetattr");
- initscr();
- term_size(0);
- old_rows = rows;
- resizeterm(rows, cols);
- signal(SIGWINCH, term_size);
- signal(SIGINT, sigint_handler);
+ if(!once) {
+ initscr();
+ term_size(0);
+ old_rows = rows;
+ resizeterm(rows, cols);
+ signal(SIGWINCH, term_size);
+ signal(SIGINT, sigint_handler);
+ } else {
+ old_rows = rows;
+ rows = 80;
+ cols = 24;
+ }
do {
struct slab_info *curr;
@@ -341,12 +363,12 @@ int main(int argc, char *argv[])
break;
if (old_rows != rows) {
- resizeterm(rows, cols);
+ if(!once) resizeterm(rows, cols);
old_rows = rows;
}
move(0,0);
- printw( " Active / Total Objects (%% used) : %d / %d (%.1f%%)\n"
+ printwf(once, " Active / Total Objects (%% used) : %d / %d (%.1f%%)\n"
" Active / Total Slabs (%% used) : %d / %d (%.1f%%)\n"
" Active / Total Caches (%% used) : %d / %d (%.1f%%)\n"
" Active / Total Size (%% used) : %.2fK / %.2fK (%.1f%%)\n"
@@ -360,15 +382,15 @@ int main(int argc, char *argv[])
slab_list = slabsort(slab_list);
- attron(A_REVERSE);
- printw( "%6s %6s %4s %8s %6s %8s %10s %-23s\n",
+ if(!once) attron(A_REVERSE);
+ printwf(once, "%6s %6s %4s %8s %6s %8s %10s %-23s\n",
"OBJS", "ACTIVE", "USE", "OBJ SIZE", "SLABS",
"OBJ/SLAB", "CACHE SIZE", "NAME");
- attroff(A_REVERSE);
+ if(!once) attroff(A_REVERSE);
curr = slab_list;
for (i = 0; i < rows - 8 && curr->next; i++) {
- printw("%6u %6u %3u%% %7.2fK %6u %8u %9uK %-23s\n",
+ printwf(once, "%6u %6u %3u%% %7.2fK %6u %8u %9uK %-23s\n",
curr->nr_objs, curr->nr_active_objs, curr->use,
curr->obj_size / 1024.0, curr->nr_slabs,
curr->objs_per_slab, (unsigned)(curr->cache_size / 1024),
@@ -376,7 +398,7 @@ int main(int argc, char *argv[])
curr = curr->next;
}
- refresh();
+ if(!once) refresh();
put_slabinfo(slab_list);
FD_ZERO(&readfds);
@@ -392,6 +414,6 @@ int main(int argc, char *argv[])
tcsetattr(0, TCSAFLUSH, &saved_tty);
free_slabinfo(slab_list);
- endwin();
+ if(!once) endwin();
return 0;
}

View file

@ -0,0 +1,19 @@
diff -up procps-3.2.7/top.c.clrscr procps-3.2.7/top.c
--- procps-3.2.7/top.c.clrscr 2008-04-08 08:49:48.000000000 +0200
+++ procps-3.2.7/top.c 2008-04-08 08:50:07.000000000 +0200
@@ -2109,6 +2109,7 @@ static void fields_sort (void)
*p = x + 'A';
Curwin->rc.sortindx = x;
putp(Cap_curs_norm);
+ putp(Cap_clr_scr);
}
@@ -2134,6 +2135,7 @@ static void fields_toggle (void)
*p = i + 'A';
}
putp(Cap_curs_norm);
+ putp(Cap_clr_scr);
}
/*###### Windows/Field Groups support #################################*/

View file

@ -0,0 +1,20 @@
--- procps-3.2.7/top.c.orig 2007-09-07 21:28:41.000000000 +0100
+++ procps-3.2.7/top.c 2007-09-07 21:29:15.000000000 +0100
@@ -959,8 +959,15 @@
// and just in case we're 2.2.xx compiled without SMP support...
if (Cpu_tot == 1) {
- cpus[1].id = 0;
- memcpy(cpus, &cpus[1], sizeof(CPU_t));
+ cpus[0].id = cpus[1].id = 0;
+ cpus[0].u = cpus[1].u;
+ cpus[0].n = cpus[1].n;
+ cpus[0].s = cpus[1].s;
+ cpus[0].i = cpus[1].i;
+ cpus[0].w = cpus[1].w;
+ cpus[0].x = cpus[1].x;
+ cpus[0].y = cpus[1].y;
+ cpus[0].z = cpus[1].z;
}
// now value each separate cpu's tics

View file

@ -0,0 +1,84 @@
diff -up procps-3.2.7/top.c.p15 procps-3.2.7/top.c
--- procps-3.2.7/top.c.p15 2008-09-01 11:37:51.000000000 +0200
+++ procps-3.2.7/top.c 2008-09-01 11:37:51.000000000 +0200
@@ -121,6 +121,7 @@ static int No_ksyms = -1, // set t
Batch = 0, // batch mode, collect no input, dumb output
Loops = -1, // number of iterations, -1 loops forever
Secure_mode = 0; // set if some functionality restricted
+static int CPU_loop = 0; // wait for reliable CPU data
/* Some cap's stuff to reduce runtime calls --
to accomodate 'Batch' mode, they begin life as empty strings */
@@ -1679,6 +1680,9 @@ static void before (char *me)
Fieldstab[P_PPD].fmts = pid_fmt;
Fieldstab[P_PPD].head = " PPID" + 10 - pid_digits;
}
+
+ if (( getenv("CPULOOP")) && ( atoi(getenv("CPULOOP")) == 1 ))
+ CPU_loop = 1;
}
@@ -2978,6 +2981,7 @@ static proc_t **summary_show (void)
{
static proc_t **p_table = NULL;
static CPU_t *smpcpu = NULL;
+ static int first = 0;
// whoa first time, gotta' prime the pump...
if (!p_table) {
@@ -3025,6 +3029,28 @@ static proc_t **summary_show (void)
smpcpu = cpus_refresh(smpcpu);
+ if (first==0 && CPU_loop)
+ {
+ int i;
+ CPU_t *cpu;
+ for (i = 0; i < Cpu_tot; i++) {
+ cpu = &smpcpu[i];
+ cpu->u_sav = cpu->u;
+ cpu->s_sav = cpu->s;
+ cpu->n_sav = cpu->n;
+ cpu->i_sav = cpu->i;
+ cpu->w_sav = cpu->w;
+ cpu->x_sav = cpu->x;
+ cpu->y_sav = cpu->y;
+ cpu->z_sav = cpu->z;
+ }
+ tv.tv_sec = Rc.delay_time;
+ tv.tv_usec = (Rc.delay_time - (int)Rc.delay_time) * 1000000;
+ select(0, NULL, NULL, NULL, &tv);
+
+ smpcpu = cpus_refresh(smpcpu);
+ }
+
if (CHKw(Curwin, View_CPUSUM)) {
// display just the 1st /proc/stat line
summaryhlp(&smpcpu[Cpu_tot], "Cpu(s):");
@@ -3050,6 +3076,8 @@ static proc_t **summary_show (void)
}
SETw(Curwin, NEWFRAM_cwo);
+
+ first = 1;
return p_table;
}
diff -up procps-3.2.7/top.1.p15 procps-3.2.7/top.1
--- procps-3.2.7/top.1.p15 2008-09-01 11:37:51.000000000 +0200
+++ procps-3.2.7/top.1 2008-09-01 11:37:51.000000000 +0200
@@ -1183,6 +1183,13 @@ Then ponder this:
Send bug reports to:
Albert D\. Cahalan, <albert@users.sf.net>
+The top command calculates Cpu(s) by looking at the change in CPU time values
+between samples. When you first run it, it has no previous sample to compare
+to, so these initial values are the percentages since boot. It means you need
+at least two loops or you have to ignore summary output from the first loop.
+This is problem for example for batch mode. There is a possible workaround if
+you define the CPULOOP=1 environment variable. The top command will be run one
+extra hidden loop for CPU data before standard output.
.\" ----------------------------------------------------------------------
.SH 8. HISTORY Former top

View file

@ -0,0 +1,32 @@
diff -up procps-3.2.7/top.1.cpudesc procps-3.2.7/top.1
--- procps-3.2.7/top.1.cpudesc 2008-01-18 08:04:19.000000000 +0100
+++ procps-3.2.7/top.1 2008-01-18 08:15:49.000000000 +0100
@@ -121,6 +121,7 @@
2. FIELDS / Columns
a. DESCRIPTIONS of Fields
b. SELECTING and ORDERING Columns
+ c. SUMMARY Area Fields
3. INTERACTIVE Commands
a. GLOBAL Commands
b. SUMMARY Area Commands
@@ -540,6 +540,20 @@ You\fI move\fR a field to the\fB left\fR
upper case\fR letter and to the\fB right\fR with the\fB lower case\fR
letter.
+.\" ......................................................................
+.SS 2c. SUMMARY Area Fields
+.\" ----------------------------------------------------------------------
+The summary area fields describing CPU statistics are abbreviated. They provide
+information about times spent in:
+ \fR us = user mode
+ \fR sy = system mode
+ \fR ni = low priority user mode (nice)
+ \fR id = idle task
+ \fR wa = I/O waiting
+ \fR hi = servicing IRQs
+ \fR si = servicing soft IRQs
+ \fR st = steal (time given to other DomU instances)
+
.\" ----------------------------------------------------------------------
.SH 3. INTERACTIVE Commands

View file

@ -0,0 +1,98 @@
--- procps-3.2.7/top.c.remcpu 2006-07-10 10:41:11.000000000 +0200
+++ procps-3.2.7/top.c 2006-07-10 10:41:35.000000000 +0200
@@ -912,6 +912,7 @@
static CPU_t *cpus_refresh (CPU_t *cpus)
{
static FILE *fp = NULL;
+ static int cpu_max;
int i;
int num;
// enough for a /proc/stat CPU line (not the intr line)
@@ -926,24 +927,29 @@
can hold tics representing the /proc/stat cpu summary (the first
line read) -- that slot supports our View_CPUSUM toggle */
cpus = alloc_c((1 + Cpu_tot) * sizeof(CPU_t));
+ cpu_max = Cpu_tot;
}
+ else if (cpu_max > Cpu_tot)
+ /* move saved CUPs summary to cpu_max possition */
+ memcpy(&cpus[cpu_max], &cpus[Cpu_tot], sizeof(CPU_t));
+
rewind(fp);
fflush(fp);
// first value the last slot with the cpu summary line
if (!fgets(buf, sizeof(buf), fp)) std_err("failed /proc/stat read");
- cpus[Cpu_tot].x = 0; // FIXME: can't tell by kernel version number
- cpus[Cpu_tot].y = 0; // FIXME: can't tell by kernel version number
- cpus[Cpu_tot].z = 0; // FIXME: can't tell by kernel version number
+ cpus[cpu_max].x = 0; // FIXME: can't tell by kernel version number
+ cpus[cpu_max].y = 0; // FIXME: can't tell by kernel version number
+ cpus[cpu_max].z = 0; // FIXME: can't tell by kernel version number
num = sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu",
- &cpus[Cpu_tot].u,
- &cpus[Cpu_tot].n,
- &cpus[Cpu_tot].s,
- &cpus[Cpu_tot].i,
- &cpus[Cpu_tot].w,
- &cpus[Cpu_tot].x,
- &cpus[Cpu_tot].y,
- &cpus[Cpu_tot].z
+ &cpus[cpu_max].u,
+ &cpus[cpu_max].n,
+ &cpus[cpu_max].s,
+ &cpus[cpu_max].i,
+ &cpus[cpu_max].w,
+ &cpus[cpu_max].x,
+ &cpus[cpu_max].y,
+ &cpus[cpu_max].z
);
if (num < 4)
std_err("failed /proc/stat read");
@@ -955,7 +961,7 @@
}
// now value each separate cpu's tics
- for (i = 0; 1 < Cpu_tot && i < Cpu_tot; i++) {
+ for (i = 0; ; i++) {
if (!fgets(buf, sizeof(buf), fp)) std_err("failed /proc/stat read");
cpus[i].x = 0; // FIXME: can't tell by kernel version number
cpus[i].y = 0; // FIXME: can't tell by kernel version number
@@ -964,9 +970,35 @@
&cpus[i].id,
&cpus[i].u, &cpus[i].n, &cpus[i].s, &cpus[i].i, &cpus[i].w, &cpus[i].x, &cpus[i].y, &cpus[i].z
);
- if (num < 4)
- std_err("failed /proc/stat read");
+ if (num < 4) {
+ Cpu_tot = i;
+ break;
+ }
+ if (i == cpu_max - 1) {
+ // Bump cpu_max and extend cpus
+ cpu_max++;
+ cpus = realloc(cpus, (1 + cpu_max) * sizeof(CPU_t));
+ if (!cpus) std_err("realloc failed");
+ memcpy(&cpus[cpu_max], &cpus[cpu_max-1], sizeof(CPU_t));
+ }
+ }
+
+ if (cpu_max > Cpu_tot)
+ memcpy(&cpus[Cpu_tot], &cpus[cpu_max], sizeof(CPU_t));
+
+ // and just in case we're 2.2.xx compiled without SMP support...
+ if (Cpu_tot == 1) {
+ cpus[0].id = cpus[1].id = 0;
+ cpus[0].u = cpus[1].u;
+ cpus[0].n = cpus[1].n;
+ cpus[0].s = cpus[1].s;
+ cpus[0].i = cpus[1].i;
+ cpus[0].w = cpus[1].w;
+ cpus[0].x = cpus[1].x;
+ cpus[0].y = cpus[1].y;
+ cpus[0].z = cpus[1].z;
}
+
return cpus;
}

View file

@ -0,0 +1,37 @@
--- procps-3.2.7/top.c.sorthigh 2007-02-05 09:06:34.000000000 +0100
+++ procps-3.2.7/top.c 2007-02-05 09:09:35.000000000 +0100
@@ -3121,6 +3121,7 @@
unsigned w = Fieldstab[i].width;
int advance = (x==0) && !Rc.mode_altscr;
+ f += advance;
switch (i) {
case P_CMD:
@@ -3179,7 +3180,7 @@
break;
case P_PRI:
if (unlikely(-99 > p->priority) || unlikely(999 < p->priority)) {
- f = " RT";
+ f = advance ? " RT" : " RT";
MKCOL("");
} else
MKCOL((int)p->priority);
@@ -3227,7 +3228,7 @@
break;
case P_WCH:
if (No_ksyms) {
- f = " %08lx ";
+ f = advance ? "%08lx " : " %08lx ";
MKCOL((long)p->wchan);
} else {
MKCOL(lookup_wchan(p->wchan, p->XXXID));
@@ -3236,7 +3237,7 @@
} /* end: switch 'procflag' */
- rp = scat(rp, cbuf+advance);
+ rp = scat(rp, cbuf);
} /* end: for 'maxpflgs' */
PUFF(

View file

@ -0,0 +1,16 @@
--- procps-3.2.7/w.c.kzak 2007-04-02 23:58:30.000000000 +0200
+++ procps-3.2.7/w.c 2007-04-03 00:09:15.000000000 +0200
@@ -149,11 +149,11 @@
const proc_t *restrict const tmp = *pptr;
if(unlikely(tmp->tgid == u->ut_pid)) {
*found_utpid = 1;
- best = tmp;
+ if (!best)
+ best = tmp;
}
if(tmp->tty != line) continue;
(*jcpu) += tmp->utime + tmp->stime;
- secondbest = tmp;
/* same time-logic here as for "best" below */
if(! (secondbest && tmp->start_time <= secondbest->start_time) ){
secondbest = tmp;

View file

@ -0,0 +1,139 @@
diff -u procps-3.2.7/Makefile procps/Makefile
--- procps-3.2.7/Makefile 2007-01-16 17:24:49.000000000 +0100
+++ procps/Makefile 2007-01-16 17:29:27.000000000 +0100
@@ -67,7 +67,7 @@
# plus the top-level Makefile to make it work stand-alone.
_TARFILES := Makefile
-CURSES := -lncurses
+CURSES := -lncursesw
# This seems about right for the dynamic library stuff.
# Something like this is probably needed to make the SE Linux
diff -u procps-3.2.7/watch.c procps/watch.c
--- procps-3.2.7/watch.c 2007-01-16 17:24:49.000000000 +0100
+++ procps/watch.c 2007-01-16 18:06:57.000000000 +0100
@@ -28,6 +28,8 @@
#include <termios.h>
#include <locale.h>
#include "proc/procps.h"
+#include <wchar.h>
+#include <wctype.h>
#ifdef FORCE_8BIT
#undef isprint
@@ -137,6 +139,27 @@
}
}
+static wint_t
+readwc(FILE *stream, mbstate_t *mbs)
+{
+ for (;;) {
+ int chr;
+ char c;
+ wchar_t wc;
+ size_t len;
+
+ chr = getc(stream);
+ if (chr == EOF)
+ return WEOF;
+ c = chr;
+ len = mbrtowc(&wc, &c, 1, mbs);
+ if (len == (size_t)-1)
+ memset(mbs, 0, sizeof(*mbs));
+ else if (len != (size_t)-2)
+ return wc;
+ }
+}
+
int
main(int argc, char *argv[])
{
@@ -243,6 +266,7 @@
FILE *p;
int x, y;
int oldeolseen = 1;
+ mbstate_t mbs;
if (screen_size_changed) {
get_terminal_size();
@@ -276,49 +300,63 @@
do_exit(2);
}
+ memset(&mbs, 0, sizeof(mbs));
for (y = show_title; y < height; y++) {
int eolseen = 0, tabpending = 0;
for (x = 0; x < width; x++) {
- int c = ' ';
- int attr = 0;
+ wint_t c = L' ';
+ int attr = 0, c_width;
+ cchar_t cc;
+ wchar_t wstr[2];
if (!eolseen) {
/* if there is a tab pending, just spit spaces until the
next stop instead of reading characters */
if (!tabpending)
do
- c = getc(p);
- while (c != EOF && !isprint(c)
- && c != '\n'
- && c != '\t');
- if (c == '\n')
+ c = readwc(p, &mbs);
+ while (c != WEOF && !iswprint(c)
+ && c != L'\n'
+ && c != L'\t');
+ if (c == L'\n')
if (!oldeolseen && x == 0) {
x = -1;
continue;
} else
eolseen = 1;
- else if (c == '\t')
+ else if (c == L'\t')
tabpending = 1;
- if (c == EOF || c == '\n' || c == '\t')
- c = ' ';
+ if (c == WEOF || c == L'\n' || c == L'\t')
+ c = L' ';
if (tabpending && (((x + 1) % 8) == 0))
tabpending = 0;
}
+ wstr[0] = c;
+ wstr[1] = 0;
+ setcchar (&cc, wstr, 0, 0, NULL);
move(y, x);
if (option_differences) {
- chtype oldch = inch();
- char oldc = oldch & A_CHARTEXT;
+ cchar_t oldc;
+ wchar_t oldwstr[2];
+ attr_t attrs;
+ short colors;
+
+ in_wch(&oldc);
+ getcchar(&oldc, oldwstr, &attrs, &colors, NULL);
attr = !first_screen
- && ((char)c != oldc
+ && (wstr[0] != oldwstr[0]
||
(option_differences_cumulative
- && (oldch & A_ATTRIBUTES)));
+ && attrs));
}
if (attr)
standout();
- addch(c);
+ add_wch(&cc);
if (attr)
standend();
+ c_width = wcwidth(c);
+ if (c_width > 1)
+ x += c_width - 1;
}
oldeolseen = eolseen;
}

View file

@ -0,0 +1,23 @@
https://bugs.gentoo.org/303120
make sure the linux version constructor runs before the libproc constructor
since the latter uses variables setup by the former
fix by Chris Coleman
Index: proc/version.c
===================================================================
RCS file: /cvsroot/procps/procps/proc/version.c,v
retrieving revision 1.7
diff -u -p -r1.7 version.c
--- procps-old/proc/version.c 9 Feb 2003 07:27:16 -0000 1.7
+++ procps/proc/version.c 14 Nov 2010 00:22:44 -0000
@@ -33,7 +33,7 @@ void display_version(void) {
int linux_version_code;
-static void init_Linux_version(void) __attribute__((constructor));
+static void init_Linux_version(void) __attribute__((constructor(100)));
static void init_Linux_version(void) {
static struct utsname uts;
int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */

View file

@ -0,0 +1,66 @@
diff -Nur procps-3.2.8-orig/proc/sysinfo.c procps-3.2.8/proc/sysinfo.c
--- procps-3.2.8-orig/proc/sysinfo.c 2008-03-24 05:33:43.000000000 +0100
+++ procps-3.2.8/proc/sysinfo.c 2009-12-18 22:50:52.000000000 +0100
@@ -74,17 +74,19 @@
/***********************************************************************/
int uptime(double *restrict uptime_secs, double *restrict idle_secs) {
double up=0, idle=0;
- char *restrict savelocale;
+ char *savelocale;
FILE_TO_BUF(UPTIME_FILE,uptime_fd);
- savelocale = setlocale(LC_NUMERIC, NULL);
+ savelocale = strdup(setlocale(LC_NUMERIC, NULL));
setlocale(LC_NUMERIC,"C");
if (sscanf(buf, "%lf %lf", &up, &idle) < 2) {
setlocale(LC_NUMERIC,savelocale);
+ free(savelocale);
fputs("bad data in " UPTIME_FILE "\n", stderr);
return 0;
}
setlocale(LC_NUMERIC,savelocale);
+ free(savelocale);
SET_IF_DESIRED(uptime_secs, up);
SET_IF_DESIRED(idle_secs, idle);
return up; /* assume never be zero seconds in practice */
@@ -128,9 +130,9 @@
double up_1, up_2, seconds;
unsigned long long jiffies;
unsigned h;
- char *restrict savelocale;
+ char *savelocale;
- savelocale = setlocale(LC_NUMERIC, NULL);
+ savelocale = strdup(setlocale(LC_NUMERIC, NULL));
setlocale(LC_NUMERIC, "C");
do{
FILE_TO_BUF(UPTIME_FILE,uptime_fd); sscanf(buf, "%lf", &up_1);
@@ -141,6 +143,7 @@
/* uptime(&up_2, NULL); */
} while((long long)( (up_2-up_1)*1000.0/up_1 )); /* want under 0.1% error */
setlocale(LC_NUMERIC, savelocale);
+ free(savelocale);
jiffies = user_j + nice_j + sys_j + other_j;
seconds = (up_1 + up_2) / 2;
h = (unsigned)( (double)jiffies/seconds/smp_num_cpus );
@@ -303,16 +306,18 @@
/***********************************************************************/
void loadavg(double *restrict av1, double *restrict av5, double *restrict av15) {
double avg_1=0, avg_5=0, avg_15=0;
- char *restrict savelocale;
+ char *savelocale;
FILE_TO_BUF(LOADAVG_FILE,loadavg_fd);
- savelocale = setlocale(LC_NUMERIC, NULL);
+ savelocale = strdup(setlocale(LC_NUMERIC, NULL));
setlocale(LC_NUMERIC, "C");
if (sscanf(buf, "%lf %lf %lf", &avg_1, &avg_5, &avg_15) < 3) {
fputs("bad data in " LOADAVG_FILE "\n", stderr);
+ free(savelocale);
exit(1);
}
setlocale(LC_NUMERIC, savelocale);
+ free(savelocale);
SET_IF_DESIRED(av1, avg_1);
SET_IF_DESIRED(av5, avg_5);
SET_IF_DESIRED(av15, avg_15);

View file

@ -0,0 +1,49 @@
diff -up procps-3.2.8/top.c.threads procps-3.2.8/top.c
--- procps-3.2.8/top.c.threads 2009-10-01 07:14:43.000000000 -0400
+++ procps-3.2.8/top.c 2009-10-05 14:05:00.000000000 -0400
@@ -1138,6 +1138,7 @@ static proc_t **procs_refresh (proc_t **
#define ENTsz sizeof(proc_t)
static unsigned savmax = 0; // first time, Bypass: (i)
proc_t *ptsk = (proc_t *)-1; // first time, Force: (ii)
+ proc_t *saved_ptsk;
unsigned curmax = 0; // every time (jeeze)
PROCTAB* PT;
static int show_threads_was_enabled = 0; // optimization
@@ -1172,6 +1173,10 @@ static proc_t **procs_refresh (proc_t **
while (curmax < savmax) {
proc_t *ttsk;
if (unlikely(!(ptsk = readproc(PT, NULL)))) break;
+ if(!show_threads_was_enabled)
+ saved_ptsk = ptsk;
+ else
+ saved_ptsk = NULL;
show_threads_was_enabled = 1;
while (curmax < savmax) {
unsigned idx;
@@ -1189,7 +1194,7 @@ static proc_t **procs_refresh (proc_t **
prochlp(ttsk);
++curmax;
}
- free(ptsk); // readproc() proc_t not used
+ if(!saved_ptsk) free(ptsk); // readproc() proc_t not used
}
}
@@ -1208,7 +1213,8 @@ static proc_t **procs_refresh (proc_t **
else { // show each thread in a process separately
while (ptsk) {
proc_t *ttsk;
- if (likely(ptsk = readproc(PT, NULL))) {
+ if (likely(ptsk = readproc(PT, NULL)) ||
+ unlikely(saved_ptsk && (ptsk = saved_ptsk)) ) {
show_threads_was_enabled = 1;
while (1) {
table = alloc_r(table, (curmax + 1) * PTRsz);
@@ -1216,6 +1222,7 @@ static proc_t **procs_refresh (proc_t **
prochlp(ttsk);
table[curmax++] = ttsk;
}
+ saved_ptsk = NULL;
free(ptsk); // readproc() proc_t not used
}
}

View file

@ -1,30 +0,0 @@
Description: Documenting maj_flt and min_flt output specifiers in ps.1
Bug-Debian: http://bugs.debian.org/434221
Author: Craig Small <csmall@debian.org>
Last-Update: 2010-02-25
--- a/ps/ps.1
+++ b/ps/ps.1
@@ -4,7 +4,7 @@
.\" Quick hack conversion by Albert Cahalan, 1998.
.\" Licensed under version 2 of the Gnu General Public License.
.\"
-.TH PS 1 "July 28, 2004" "Linux" "Linux User's Manual"
+.TH PS 1 "February 25, 2010" "Linux" "Linux User's Manual"
.\"
.\" To render this page:
.\" groff -t -b -man -X -P-resolution -P100 -Tps ps.1 &
@@ -1084,6 +1084,14 @@
(alias\ \fBspid\fR,\ \fBtid\fR).
T}
+maj_flt MAJFLT T{
+The number of major page faults that have occured with this process.
+T}
+
+min_flt MINFLT T{
+The number of minor page faults that have occured with this process.
+T}
+
ni NI T{
nice value. This ranges from 19 (nicest) to \-20 (not\ nice to\ others),
see\ \fInice\fR(1). (alias\ \fBnice\fR).

View file

@ -1,548 +0,0 @@
Author: Jari Aalto <jari.aalto@cante.net>
Description: Re-sort ps.1 options
Bug-Debian: http://bugs.debian.org/518620
Reviewed-by: Craig Small <csmall@debian.org>
Index: b/ps/ps.1
===================================================================
--- a/ps/ps.1 2009-11-24 21:00:48.000000000 +1100
+++ b/ps/ps.1 2009-11-24 21:00:49.000000000 +1100
@@ -158,20 +158,6 @@
.PP
.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.SH "SIMPLE PROCESS SELECTION"
-.opt \-A
-Select all processes. Identical to \fB\-e\fR.
-
-.opt \-N
-Select all processes except those that fulfill the specified conditions.
-(negates the selection) Identical to \fB\-\-deselect\fR.
-
-.opt T
-Select all processes associated with this terminal. Identical to the
-\fBt\fR option without any argument.
-
-.opt \-a
-Select all processes except both session leaders (see \fIgetsid\fR(2)) and
-processes not associated with a terminal.
.opt a
Lift the BSD\-style "only yourself" restriction, which is imposed upon
@@ -183,9 +169,20 @@
list all processes with a terminal (tty),
or to list all processes when used together with the \fBx\fR option.
+.opt \-A
+Select all processes. Identical to \fB\-e\fR.
+
+.opt \-a
+Select all processes except both session leaders (see \fIgetsid\fR(2)) and
+processes not associated with a terminal.
+
.opt \-d
Select all processes except session leaders.
+.opt \-\-deselect
+Select all processes except those that fulfill the specified conditions.
+(negates the selection) Identical to \fB\-N\fR.
+
.opt \-e
Select all processes. Identical to \fB\-A\fR.
@@ -194,11 +191,20 @@
.\" add in the group leaders -- at least according to the SunOS 4
.\" man page on the FreeBSD site. Uh oh. I think I had tested SunOS
.\" though, so maybe the code is correct.
+
.opt g
Really all, even session leaders. This flag is obsolete and may be
discontinued in a future release. It is normally implied by the \fBa\fR flag,
and is only useful when operating in the sunos4 personality.
+.opt \-N
+Select all processes except those that fulfill the specified conditions.
+(negates the selection) Identical to \fB\-\-deselect\fR.
+
+.opt T
+Select all processes associated with this terminal. Identical to the
+\fBt\fR option without any argument.
+
.opt r
Restrict the selection to only running processes.
@@ -212,10 +218,6 @@
list all processes owned by you (same EUID as \fBps\fR),
or to list all processes when used together with the \fBa\fR option.
-.opt \-\-deselect
-Select all processes except those that fulfill the specified conditions.
-(negates the selection) Identical to \fB\-N\fR.
-
.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.PD
.PP
@@ -224,6 +226,13 @@
or comma\-separated list. They can be used multiple times.
For\ example:\ \fBps\ \-p\ "1\ 2"\ \-p\ 3,4\fR
.P
+
+.opt \-\fI123\fR
+Identical to \fB\-\-sid\ \fI123\fR.
+
+.opt \fI123\fR
+Identical to \fB\-\-pid\ \fI123\fR.
+
.opt \-C \ cmdlist
Select by command name.
.br
@@ -237,24 +246,6 @@
\fIgrplist\fR list. The real group ID identifies the group of the user
who created the process, see \fIgetgid\fR(2).
-.opt U \ userlist
-Select by effective user ID (EUID) or name.
-.br
-This selects the processes whose effective user name
-or ID is in \fIuserlist\fR.
-The effective user\ ID describes the user whose file
-access permissions are used by the process
-(see\ \fIgeteuid\fR(2)).
-Identical to \fB\-u\fR and\ \fB\-\-user\fR.
-
-.opt \-U \ userlist
-select by real user ID (RUID) or name.
-.br
-It selects the processes whose real user name or ID is in the
-\fIuserlist\fR list.
-The real user ID identifies the user who created the process,
-see\ \fIgetuid\fR(2).
-
.opt \-g \ grplist
Select by session OR by effective group name.
.br
@@ -266,6 +257,17 @@
Group ID numbers will work only when some group names are also specified.
See the \fB\-s\fR and \fB\-\-group\fR options.
+.opt \-\-Group \ grplist
+Select by real group ID (RGID) or name. Identical to \fB\-G\fR.
+
+.opt \-\-group \ grplist
+Select by effective group ID (EGID) or name.
+.br
+This selects the processes whose effective group name or ID is in
+\fIgrouplist\fR. The effective group ID describes the group whose file
+access permissions are used by the process (see\ \fIgeteuid\fR(2)).
+The \fB\-g\fR option is often an alternative to\ \fB\-\-group\fR.
+
.opt p \ pidlist
Select by process ID. Identical to \fB\-p\fR and\ \fB\-\-pid\fR.
@@ -275,12 +277,25 @@
This selects the processes whose process ID numbers appear in
\fIpidlist\fR. Identical to \fBp\fR and\ \fB\-\-pid\fR.
+.opt \-\-pid \ pidlist
+Select by process\ ID. Identical to \fB\-p\fR\ and\ \fBp\fR.
+
+.opt \-\-ppid \ pidlist
+Select by parent process\ ID.
+This selects the processes
+with a parent\ process\ ID in \fRpidlist\fR.
+That\ is, it selects processes that are children
+of those listed in \fRpidlist\fR.
+
.opt \-s \ sesslist
Select by session ID.
.br
This selects the processes
with a session ID specified in\ \fIsesslist\fR.
+.opt \-\-sid \ sesslist
+Select by session\ ID. Identical to\ \fB\-s\fR.
+
.opt t \ ttylist
Select by tty. Nearly identical to \fB\-t\fR and \fB\-\-tty\fR,
but can also be used with an empty \fIttylist\fR to indicate
@@ -297,6 +312,27 @@
forms: /dev/ttyS1, ttyS1, S1.
A\ plain "\-" may be used to select processes not attached to any terminal.
+.opt \-\-tty \ ttylist
+Select by terminal. Identical to \fB\-t\fR and\ \fBt\fR.
+
+.opt U \ userlist
+Select by effective user ID (EUID) or name.
+.br
+This selects the processes whose effective user name
+or ID is in \fIuserlist\fR.
+The effective user\ ID describes the user whose file
+access permissions are used by the process
+(see\ \fIgeteuid\fR(2)).
+Identical to \fB\-u\fR and\ \fB\-\-user\fR.
+
+.opt \-U \ userlist
+select by real user ID (RUID) or name.
+.br
+It selects the processes whose real user name or ID is in the
+\fIuserlist\fR list.
+The real user ID identifies the user who created the process,
+see\ \fIgetuid\fR(2).
+
.opt \-u \ userlist
Select by effective user ID (EUID) or name.
.br
@@ -305,46 +341,13 @@
access permissions are used by the process (see\ \fIgeteuid\fR(2)).
Identical to \fBU\fR and \fB\-\-user\fR.
-.opt \-\-Group \ grplist
-Select by real group ID (RGID) or name. Identical to \fB\-G\fR.
-
.opt \-\-User \ userlist
Select by real user ID (RUID) or name. Identical to \fB\-U\fR.
-.opt \-\-group \ grplist
-Select by effective group ID (EGID) or name.
-.br
-This selects the processes whose effective group name or ID is in
-\fIgrouplist\fR. The effective group ID describes the group whose file
-access permissions are used by the process (see\ \fIgeteuid\fR(2)).
-The \fB\-g\fR option is often an alternative to\ \fB\-\-group\fR.
-
-.opt \-\-pid \ pidlist
-Select by process\ ID. Identical to \fB\-p\fR\ and\ \fBp\fR.
-
-.opt \-\-ppid \ pidlist
-Select by parent process\ ID.
-This selects the processes
-with a parent\ process\ ID in \fRpidlist\fR.
-That\ is, it selects processes that are children
-of those listed in \fRpidlist\fR.
-
-.opt \-\-sid \ sesslist
-Select by session\ ID. Identical to\ \fB\-s\fR.
-
-.opt \-\-tty \ ttylist
-Select by terminal. Identical to \fB\-t\fR and\ \fBt\fR.
-
.opt \-\-user \ userlist
Select by effective user ID (EUID) or name.
Identical to \fB\-u\fR and\ \fBU\fR.
-.opt \-\fI123\fR
-Identical to \fB\-\-sid\ \fI123\fR.
-
-.opt \fI123\fR
-Identical to \fB\-\-pid\ \fI123\fR.
-
.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.PD
.PP
@@ -353,38 +356,12 @@
The output may differ by personality.
.PP
-.opt \-F
-extra full format. See the \fB\-f\fR option, which \fB\-F\fR implies.
-
-.opt \-O \ format
-is like \fB\-o\fR, but preloaded with some default columns.
-Identical to \fB\-o\ pid,\fIformat\fB,state,tname,time,command\fR
-or \fB\-o\ pid,\fIformat\fB,tname,time,cmd\fR, see\ \fB\-o\fR\ below.
-
-.opt O \ format
-is preloaded \fBo\fR (overloaded).
-.br
-The BSD \fBO\fR option can act like \fB\-O\fR (user\-defined output
-format with some common fields predefined) or can be used to specify
-sort order. Heuristics are used to determine the behavior of this
-option. To ensure that the desired behavior is obtained (sorting or
-formatting), specify the option in some other way
-(e.g. with \fB\-O\fR or \fB\-\-sort\fR).
-When used as a formatting option, it is identical to \fB\-O\fR, with the
-BSD\ personality.
-
-.opt \-M
-Add a column of security data. Identical to \fBZ\fR. (for\ SE\ Linux)
-
-.opt X
-Register format.
-
-.opt Z
-Add a column of security data. Identical to \fB\-M\fR. (for\ SE\ Linux)
-
.opt \-c
Show different scheduler information for the \fB\-l\fR option.
+.opt \-\-context
+Display security context format. (for\ SE\ Linux)
+
.opt \-f
does full\-format listing. This option can be combined with many
other UNIX\-style options to add additional columns. It also causes
@@ -393,6 +370,12 @@
See the \fBc\fR option, the format keyword \fBargs\fR, and the
format keyword \fBcomm\fR.
+.opt \-F
+extra full format. See the \fB\-f\fR option, which \fB\-F\fR implies.
+
+.opt \-\-format \ format
+user\-defined format. Identical to \fB\-o\fR and \fBo\fR.
+
.opt j
BSD job control format.
@@ -405,6 +388,26 @@
.opt \-l
long format. The \fB\-y\fR option is often useful with this.
+.opt \-M
+Add a column of security data. Identical to \fBZ\fR. (for\ SE\ Linux)
+
+.opt O \ format
+is preloaded \fBo\fR (overloaded).
+.br
+The BSD \fBO\fR option can act like \fB\-O\fR (user\-defined output
+format with some common fields predefined) or can be used to specify
+sort order. Heuristics are used to determine the behavior of this
+option. To ensure that the desired behavior is obtained (sorting or
+formatting), specify the option in some other way
+(e.g. with \fB\-O\fR or \fB\-\-sort\fR).
+When used as a formatting option, it is identical to \fB\-O\fR, with the
+BSD\ personality.
+
+.opt \-O \ format
+is like \fB\-o\fR, but preloaded with some default columns.
+Identical to \fB\-o\ pid,\fIformat\fB,state,tname,time,command\fR
+or \fB\-o\ pid,\fIformat\fB,tname,time,cmd\fR, see\ \fB\-o\fR\ below.
+
.opt o \ format
specify user\-defined format. Identical to \fB\-o\fR and
\fB\-\-format\fR.
@@ -440,15 +443,15 @@
.opt v
display virtual memory format
+.opt X
+Register format.
+
.opt \-y
Do not show flags; show rss in place of addr.
This option can only be used with \fB\-l\fR.
-.opt \-\-format \ format
-user\-defined format. Identical to \fB\-o\fR and \fBo\fR.
-
-.opt \-\-context
-Display security context format. (for\ SE\ Linux)
+.opt Z
+Add a column of security data. Identical to \fB\-M\fR. (for\ SE\ Linux)
.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.PD
@@ -459,37 +462,6 @@
.\" .B C
.\" use raw CPU time for %CPU instead of decaying average
-.opt \-H
-show process hierarchy (forest)
-
-.opt N \ namelist
-Specify namelist file. Identical to \fB\-n\fR, see \fB\-n\fR above.
-
-.opt O \ order
-Sorting order. (overloaded)
-.br
-The BSD \fBO\fR option can act like \fB\-O\fR (user\-defined output
-format with some common fields predefined) or can be used to specify
-sort order. Heuristics are used to determine the behavior of this
-option. To ensure that the desired behavior is obtained (sorting or
-formatting), specify the option in some other way (e.g. with \fB\-O\fR
-or \fB\-\-sort\fR).
-
-For sorting, obsolete BSD \fBO\fR option syntax is
-\fBO\fR[\fB+\fR|\fB\-\fR]\fIk1\fR[,[\fB+\fR|\fB\-\fR]\fIk2\fR[,...]].
-It orders the processes listing according to the multilevel sort specified by
-the sequence of one\-letter short keys \fIk1\fR, \fIk2\fR, ... described
-in the \fBOBSOLETE SORT KEYS\fR section below.
-The\ "+" is currently optional,
-merely re\-iterating the default direction on a key,
-but may help to distinguish an \fBO\fR sort from an \fBO\fR format.
-The\ "\-" reverses direction only on the key it precedes.
-
-.opt S
-Sum up some information, such as CPU usage, from dead child processes
-into their parent. This is useful for examining a system where a
-parent process repeatedly forks off short\-lived children to do work.
-
.opt c
Show the true command name. This is derived from the name of the
executable file, rather than from the argv value. Command arguments
@@ -502,12 +474,24 @@
See the \fB\-f\fR option, the format keyword \fBargs\fR, and the
format keyword \fBcomm\fR.
+.opt \-\-cols \ n
+set screen width
+
+.opt \-\-columns \ n
+set screen width
+
+.opt \-\-cumulative
+include some dead child process data (as a sum with the parent)
+
.opt e
Show the environment after the command.
.opt f
ASCII\-art process hierarchy (forest)
+.opt \-\-forest
+ASCII art process tree
+
.opt h
No header. (or, one header per screen in the BSD personality)
.br
@@ -521,6 +505,12 @@
and \fB\-\-no\-headers\fR to enable printing headers each page or
disable headers entirely, respectively.
+.opt \-H
+show process hierarchy (forest)
+
+.opt \-\-headers
+repeat header lines, one per page of output
+
.opt k \ spec
specify sorting order. Sorting syntax is
[\fB+\fR|\fB\-\fR]\fIkey\fR[,[\fB+\fR|\fB\-\fR]\fIkey\fR[,...]]
@@ -557,40 +547,47 @@
.br
/System.map
+.opt \-\-lines \ n
+set screen height
+
.opt n
Numeric output for WCHAN and USER. (including all types of UID and GID)
-.opt \-w
-Wide output. Use this option twice for unlimited width.
-
-.opt w
-Wide output. Use this option twice for unlimited width.
-
-.opt \-\-cols \ n
-set screen width
-
-.opt \-\-columns \ n
-set screen width
-
-.opt \-\-cumulative
-include some dead child process data (as a sum with the parent)
+.opt N \ namelist
+Specify namelist file. Identical to \fB\-n\fR, see \fB\-n\fR above.
-.opt \-\-forest
-ASCII art process tree
+.opt O \ order
+Sorting order. (overloaded)
+.br
+The BSD \fBO\fR option can act like \fB\-O\fR (user\-defined output
+format with some common fields predefined) or can be used to specify
+sort order. Heuristics are used to determine the behavior of this
+option. To ensure that the desired behavior is obtained (sorting or
+formatting), specify the option in some other way (e.g. with \fB\-O\fR
+or \fB\-\-sort\fR).
-.opt \-\-headers
-repeat header lines, one per page of output
+For sorting, obsolete BSD \fBO\fR option syntax is
+\fBO\fR[\fB+\fR|\fB\-\fR]\fIk1\fR[,[\fB+\fR|\fB\-\fR]\fIk2\fR[,...]].
+It orders the processes listing according to the multilevel sort specified by
+the sequence of one\-letter short keys \fIk1\fR, \fIk2\fR, ... described
+in the \fBOBSOLETE SORT KEYS\fR section below.
+The\ "+" is currently optional,
+merely re\-iterating the default direction on a key,
+but may help to distinguish an \fBO\fR sort from an \fBO\fR format.
+The\ "\-" reverses direction only on the key it precedes.
.opt \-\-no\-headers
print no header line at all. \-\-no\-heading is an alias for this
option.
-.opt \-\-lines \ n
-set screen height
-
.opt \-\-rows \ n
set screen height
+.opt S
+Sum up some information, such as CPU usage, from dead child processes
+into their parent. This is useful for examining a system where a
+parent process repeatedly forks off short\-lived children to do work.
+
.opt \-\-sort \ spec
specify sorting order. Sorting syntax is
[\fB+\fR|\fB\-\fR]\fIkey\fR[,[\fB+\fR|\fB\-\fR]\fIkey\fR[,...]]
@@ -599,6 +596,12 @@
lexicographic order. Identical to\ \fBk\fR.
For example: \fBps\ jax\ \-\-sort=uid,\-ppid,+pid\fR
+.opt w
+Wide output. Use this option twice for unlimited width.
+
+.opt \-w
+Wide output. Use this option twice for unlimited width.
+
.opt \-\-width \ n
set screen width
@@ -614,35 +617,35 @@
.opt \-L
Show threads, possibly with LWP and NLWP columns
-.opt \-T
-Show threads, possibly with SPID column
-
.opt m
Show threads after processes
.opt \-m
Show threads after processes
+.opt \-T
+Show threads, possibly with SPID column
+
.\" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
.PD
.PP
.SH "OTHER INFORMATION"
.PD 0
+.opt \-\-help
+Print a help message.
+
+.opt \-\-info
+Print debugging info.
+
.opt L
List all format specifiers.
-.opt \-V
-Print the procps version.
-
.opt V
Print the procps version.
-.opt \-\-help
-Print a help message.
-
-.opt \-\-info
-Print debugging info.
+.opt \-V
+Print the procps version.
.opt \-\-version
Print the procps version.

View file

@ -1,157 +0,0 @@
Description: ps displays cgroup
Author: Swann Perarnau <swann.perarnau@imag.fr>
Bug-Debian: http://bugs.debian.org/469669
Reviewed-by: Craig Small <csmall@debian.org>
--- a/proc/readproc.c
+++ b/proc/readproc.c
@@ -598,6 +598,17 @@
p->environ = file2strvec(path, "environ");
else
p->environ = NULL;
+
+ if(linux_version_code>=LINUX_VERSION(2,6,24) && (flags & PROC_FILLCGROUP)) {
+ p->cgroup = file2strvec(path, "cgroup"); /* read /proc/#/cgroup */
+ if(p->cgroup && *p->cgroup) {
+ int i = strlen(*p->cgroup);
+ if( (*p->cgroup)[i-1]=='\n' )
+ (*p->cgroup)[i-1] = ' '; //little hack to remove trailing \n
+ }
+ }
+ else
+ p->cgroup = NULL;
return p;
next_proc:
@@ -686,7 +697,7 @@
t->cmdline = p->cmdline; // better not free these until done with all threads!
t->environ = p->environ;
#endif
-
+ t->cgroup = p->cgroup;
t->ppid = p->ppid; // ought to put the per-task ppid somewhere
return t;
@@ -896,6 +907,8 @@
free((void*)*p->cmdline);
if (p->environ)
free((void*)*p->environ);
+ if (p->cgroup)
+ free((void*)*p->cgroup);
free(p);
}
--- a/proc/readproc.h
+++ b/proc/readproc.h
@@ -139,6 +139,7 @@
tpgid, // stat terminal process group id
exit_signal, // stat might not be SIGCHLD
processor; // stat current (or most recent?) CPU
+ char **cgroup; // cgroup current cgroup, looks like a classic filepath
} proc_t;
// PROCTAB: data structure holding the persistent information readproc needs
@@ -236,8 +237,9 @@
#define PROC_FILLSTAT 0x0040 // read stat -- currently unconditional
#define PROC_FILLWCHAN 0x0080 // look up WCHAN name
#define PROC_FILLARG 0x0100 // alloc and fill in `cmdline'
+#define PROC_FILLCGROUP 0x0200 // alloc and fill in `cgroup`
-#define PROC_LOOSE_TASKS 0x0200 // threat threads as if they were processes
+#define PROC_LOOSE_TASKS 0x2000 // threat threads as if they were processes
// Obsolete, consider only processes with one of the passed:
#define PROC_PID 0x1000 // process id numbers ( 0 terminated)
--- a/ps/display.c
+++ b/ps/display.c
@@ -223,8 +223,7 @@
#define needs_for_format (proc_format_needs|task_format_needs)
-#define PROC_ONLY_FLAGS (PROC_FILLENV|PROC_FILLARG|PROC_FILLCOM|PROC_FILLMEM)
-
+#define PROC_ONLY_FLAGS (PROC_FILLENV|PROC_FILLARG|PROC_FILLCOM|PROC_FILLMEM|PROC_FILLCGROUP)
/***** munge lists and determine openproc() flags */
static void lists_and_needs(void){
check_headers();
@@ -342,6 +341,7 @@
}
if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
if(buf.environ) free((void*)*buf.environ); // ought to reuse
+ if(buf.cgroup) free((void*)*buf.cgroup);
}
break;
case TF_show_proc|TF_loose_tasks: // H option
@@ -354,6 +354,7 @@
}
if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
if(buf.environ) free((void*)*buf.environ); // ought to reuse
+ if(buf.cgroup) free((void*)*buf.cgroup);
}
break;
case TF_show_proc|TF_show_task: // m and -m options
@@ -366,7 +367,8 @@
}
if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
if(buf.environ) free((void*)*buf.environ); // ought to reuse
- }
+ if(buf.cgroup) free((void*)*buf.cgroup);
+ }
break;
case TF_show_task: // -L and -T options
while(readproc(ptp,&buf)){
@@ -377,7 +379,8 @@
}
if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
if(buf.environ) free((void*)*buf.environ); // ought to reuse
- }
+ if(buf.cgroup) free((void*)*buf.cgroup);
+ }
break;
}
closeproc(ptp);
--- a/ps/output.c
+++ b/ps/output.c
@@ -376,6 +376,26 @@
return max_rightward-rightward;
}
+static int pr_cgroup(char *restrict const outbuf,const proc_t *restrict const pp) {
+ if(pp->cgroup && *pp->cgroup) {
+ char *endp = outbuf;
+ int rightward=max_rightward;
+ if(forest_prefix){
+ int fh = forest_helper(outbuf);
+ endp += fh;
+ rightward -= fh;
+ }
+ if(rightward>1){
+ *endp++ = ' ';
+ rightward--;
+ endp += escape_str(endp, *pp->cgroup, OUTBUF_SIZE, &rightward);
+ }
+ return max_rightward-rightward;
+ }
+ else
+ return pr_nop(outbuf,pp);
+}
+
/* "ucomm" is the same thing: short unless -f */
static int pr_comm(char *restrict const outbuf, const proc_t *restrict const pp){
char *endp = outbuf;
@@ -1274,7 +1294,7 @@
#define GRP PROC_FILLGRP /* gid_t -> group names */
#define WCH PROC_FILLWCHAN /* do WCHAN lookup */
-
+#define CGRP PROC_FILLCGROUP /* read cgroup */
/* TODO
* pull out annoying BSD aliases into another table (to macro table?)
* add sorting functions here (to unify names)
@@ -1310,6 +1330,7 @@
{"bsdtime", "TIME", pr_bsdtime, sr_nop, 6, 0, LNX, ET|RIGHT},
{"c", "C", pr_c, sr_pcpu, 2, 0, SUN, ET|RIGHT},
{"caught", "CAUGHT", pr_sigcatch, sr_nop, 9, 0, BSD, TO|SIGNAL}, /*sigcatch*/
+{"cgroup", "CGROUP", pr_cgroup, sr_nop, 27, CGRP, LNX, PO|UNLIMITED},
{"class", "CLS", pr_class, sr_sched, 3, 0, XXX, TO|LEFT},
{"cls", "CLS", pr_class, sr_sched, 3, 0, HPU, TO|RIGHT}, /*says HPUX or RT*/
{"cmaj_flt", "-", pr_nop, sr_cmaj_flt, 1, 0, LNX, AN|RIGHT},

View file

@ -1,29 +0,0 @@
Author: <csmall@debian.org>
Description: Renames second SZ to SIZE, means we don't follow SCO but less confusion
Bug-Debian: http://bugs.debian.org/541061
Index: b/ps/output.c
===================================================================
--- a/ps/output.c 2009-11-24 21:00:47.000000000 +1100
+++ b/ps/output.c 2009-11-24 21:00:48.000000000 +1100
@@ -1522,7 +1522,7 @@
{"sigcatch", "CAUGHT", pr_sigcatch, sr_nop, 9, 0, XXX, TO|SIGNAL}, /*caught*/
{"sigignore", "IGNORED", pr_sigignore,sr_nop, 9, 0, XXX, TO|SIGNAL}, /*ignored*/
{"sigmask", "BLOCKED", pr_sigmask, sr_nop, 9, 0, XXX, TO|SIGNAL}, /*blocked*/
-{"size", "SZ", pr_swapable, sr_swapable, 5, 0, SCO, PO|RIGHT},
+{"size", "SIZE", pr_swapable, sr_swapable, 5, 0, SCO, PO|RIGHT},
{"sl", "SL", pr_nop, sr_nop, 3, 0, XXX, AN|RIGHT},
{"spid", "SPID", pr_thread, sr_tid, 5, 0, SGI, TO|PIDMAX|RIGHT},
{"stackp", "STACKP", pr_stackp, sr_start_stack, 8, 0, LNX, PO|RIGHT}, /*start_stack*/
Index: b/ps/ps.1
===================================================================
--- a/ps/ps.1 2009-11-24 21:00:47.000000000 +1100
+++ b/ps/ps.1 2009-11-24 21:00:48.000000000 +1100
@@ -1254,7 +1254,7 @@
see\ \fBblocked\fR. (alias\ \fBblocked\fR,\ \fBsig_block\fR).
T}
-size SZ T{
+size SIZE T{
approximate amount of swap space that would be required
if the process were to dirty all writable pages and then
be swapped out.

View file

@ -1,446 +0,0 @@
Description: 506303 ps displays supplementary groups
Author: Alfredo Esteban <aedelatorre@gmail.com>
Bug-Debian: http://bugs.debian.org/506303
Reviewed-by: Craig Small <csmall@debian.org>
--- a/proc/library.map
+++ b/proc/library.map
@@ -7,7 +7,7 @@
readproc; readtask; readproctab; readproctab2; look_up_our_self; escape_command;
escape_str; escape_strlist;
- openproc; closeproc; freeproc;
+ openproc; closeproc; freeproc; allocsupgrp; freesupgrp;
tty_to_dev; dev_to_tty; open_psdb_message; open_psdb; lookup_wchan;
display_version; procps_version; linux_version_code;
Hertz; smp_num_cpus; have_privs;
--- a/proc/readproc.c
+++ b/proc/readproc.c
@@ -20,6 +20,7 @@
#include <errno.h>
#include <stdarg.h>
#include <string.h>
+#include <limits.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
@@ -85,63 +86,68 @@
long Threads = 0;
long Tgid = 0;
long Pid = 0;
+ int hash = 0;
+ int isupgid = 0;
- static const unsigned char asso[] =
+ static const unsigned char asso[] =
{
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 61, 15, 61,
- 61, 61, 61, 61, 61, 61, 30, 3, 5, 5,
- 61, 5, 61, 8, 61, 61, 3, 61, 10, 61,
- 6, 61, 13, 0, 30, 25, 0, 61, 61, 61,
- 61, 61, 61, 61, 61, 61, 61, 3, 61, 13,
- 0, 0, 61, 30, 61, 25, 61, 61, 61, 0,
- 61, 61, 61, 61, 5, 61, 0, 61, 61, 61,
- 0, 61, 61, 61, 61, 61, 61, 61
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 66, 0, 66,
+ 66, 66, 66, 66, 66, 66, 3, 30, 20, 30,
+ 66, 25, 66, 20, 66, 66, 30, 66, 25, 66,
+ 0, 66, 8, 10, 3, 18, 5, 66, 66, 66,
+ 66, 66, 66, 66, 66, 66, 66, 3, 66, 10,
+ 0, 0, 66, 25, 66, 5, 66, 66, 66, 25,
+ 66, 5, 66, 66, 0, 66, 0, 0, 66, 66,
+ 25, 66, 66, 66, 66, 66, 66, 66
};
static const status_table_struct table[] = {
- F(VmStk)
+ F(Pid)
NUL NUL
- F(State)
+ F(Threads)
+ NUL
+ F(PPid)
+ NUL NUL
+ F(Tgid)
NUL
- F(VmExe)
F(ShdPnd)
+ NUL NUL
+ F(State)
NUL
- F(VmData)
+ F(VmStk)
+ NUL NUL
+ F(Uid)
NUL
- F(Name)
+ F(VmSize)
NUL NUL
F(VmRSS)
- NUL NUL
- F(VmLck)
- NUL NUL NUL
+ NUL
F(Gid)
- F(Pid)
- NUL NUL NUL
- F(VmSize)
NUL NUL
- F(VmLib)
- NUL NUL
- F(PPid)
- NUL
- F(SigCgt)
+ F(VmData)
NUL
- F(Threads)
+ F(Groups)
+ NUL NUL NUL NUL
F(SigPnd)
+ NUL NUL
+ F(SigBlk)
NUL
+ F(VmLib)
+ NUL NUL NUL NUL
+ F(VmLck)
+ NUL NUL NUL NUL
+ F(Name)
+ NUL NUL NUL NUL
F(SigIgn)
- NUL
- F(Uid)
- NUL NUL NUL NUL NUL NUL NUL NUL NUL
- NUL NUL NUL NUL NUL
- F(Tgid)
NUL NUL NUL NUL
- F(SigBlk)
- NUL NUL NUL
+ F(VmExe)
+ NUL NUL NUL NUL
+ F(SigCgt)
};
#undef F
@@ -157,6 +163,9 @@
P->vm_exe = 0;
P->vm_lib = 0;
P->nlwp = 0;
+ P->nsupgid = 0;
+ P->supgid = NULL;
+ P->supgrp = NULL;
P->signal[0] = '\0'; // so we can detect it as missing for very old kernels
goto base;
@@ -173,7 +182,9 @@
// examine a field name (hash and compare)
base:
if(unlikely(!*S)) break;
- entry = table[63 & (asso[(int)S[3]] + asso[(int)S[2]] + asso[(int)S[0]])];
+ hash = asso[S[3]] + asso[S[2]] + asso[S[0]];
+ if (hash > 65) continue;
+ entry = table[hash];
colon = strchr(S, ':');
if(unlikely(!colon)) break;
if(unlikely(colon[1]!='\t')) break;
@@ -271,6 +282,21 @@
P->sgid = strtol(S,&S,10);
P->fgid = strtol(S,&S,10);
continue;
+ case_Groups:
+ isupgid = 0;
+ if (*S != '\n'){ // Is there any supplementary group ?
+ P->supgid = (int *) xmalloc(0x0004 * sizeof(int));
+ int vctsize = 0x0004;
+ while (S[1] != '\n' && isupgid<INT_MAX){ // There is one blank before '\n'
+ if (isupgid == vctsize){
+ vctsize *= 2;
+ P->supgid = (int *)xrealloc(P->supgid,vctsize * sizeof(int));
+ }
+ P->supgid[isupgid++] = strtol(S,&S,10);
+ P->nsupgid++;
+ }
+ }
+ continue;
case_VmData:
P->vm_data = strtol(S,&S,10);
continue;
@@ -589,6 +615,13 @@
}
}
+ if (flags & PROC_FILLSUPGRP && p->nsupgid > 0){
+ allocsupgrp(p);
+ int i;
+ for (i=0; i < p->nsupgid; i++)
+ memcpy(p->supgrp[i], group_from_gid(p->supgid[i]), P_G_SZ);
+ }
+
if ((flags & PROC_FILLCOM) || (flags & PROC_FILLARG)) /* read+parse /proc/#/cmdline */
p->cmdline = file2strvec(path, "cmdline");
else
@@ -683,6 +716,13 @@
}
}
+ if (flags & PROC_FILLSUPGRP && t->nsupgid > 0){
+ allocsupgrp(t);
+ int i;
+ for (i=0; i < t->nsupgid; i++)
+ memcpy(t->supgrp[i], group_from_gid(t->supgid[i]), P_G_SZ);
+ }
+
#if 0
if ((flags & PROC_FILLCOM) || (flags & PROC_FILLARG)) /* read+parse /proc/#/cmdline */
t->cmdline = file2strvec(path, "cmdline");
@@ -897,6 +937,23 @@
}
}
+// allocate memory for supgrp
+void allocsupgrp(proc_t *p) {
+ if (!p || p->nsupgid == 0) return;
+ p->supgrp = (char**)xmalloc(p->nsupgid * sizeof(char*));
+ int i;
+ for (i=0; i<p->nsupgid; i++)
+ p->supgrp[i] = (char*)xmalloc(P_G_SZ * sizeof(char));
+}
+
+// free memory allocated for supgrp
+void freesupgrp(proc_t *p) {
+ int i;
+ for (i=0; i<p->nsupgid; i++)
+ if (p->supgrp[i]) free(p->supgrp[i]);
+ free(p->supgrp);
+}
+
// deallocate the space allocated by readproc if the passed rbuf was NULL
void freeproc(proc_t* p) {
if (!p) /* in case p is NULL */
--- a/proc/readproc.h
+++ b/proc/readproc.h
@@ -122,6 +122,7 @@
egroup[P_G_SZ], // status effective group name
sgroup[P_G_SZ], // status saved group name
fgroup[P_G_SZ], // status filesystem group name
+ **supgrp, // status supplementary groups
cmd[16]; // stat,status basename of executable file in call to exec(2)
struct proc_t
*ring, // n/a thread group ring
@@ -137,6 +138,8 @@
suid, sgid, // status saved
fuid, fgid, // status fs (used for file access only)
tpgid, // stat terminal process group id
+ nsupgid, // status number of supplementary groups
+ *supgid, // status supplementary gid's
exit_signal, // stat might not be SIGCHLD
processor; // stat current (or most recent?) CPU
char **cgroup; // cgroup current cgroup, looks like a classic filepath
@@ -198,6 +201,12 @@
// clean-up open files, etc from the openproc()
extern void closeproc(PROCTAB* PT);
+// allocate memory for supgrp
+extern void allocsupgrp(proc_t *p);
+
+// free memory allocated for supgrp
+extern void freesupgrp(proc_t *p);
+
// retrieve the next process matching the criteria set by the openproc()
extern proc_t* readproc(PROCTAB *restrict const PT, proc_t *restrict p);
extern proc_t* readtask(PROCTAB *restrict const PT, const proc_t *restrict const p, proc_t *restrict t);
@@ -238,6 +247,7 @@
#define PROC_FILLWCHAN 0x0080 // look up WCHAN name
#define PROC_FILLARG 0x0100 // alloc and fill in `cmdline'
#define PROC_FILLCGROUP 0x0200 // alloc and fill in `cgroup`
+#define PROC_FILLSUPGRP 0x0400 // resolve supplementary group id number -> group name
#define PROC_LOOSE_TASKS 0x2000 // threat threads as if they were processes
--- a/ps/display.c
+++ b/ps/display.c
@@ -342,6 +342,8 @@
if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
if(buf.environ) free((void*)*buf.environ); // ought to reuse
if(buf.cgroup) free((void*)*buf.cgroup);
+ if(buf.nsupgid > 0 && buf.supgid) free(buf.supgid);
+ if((ptp->flags & PROC_FILLSUPGRP) && buf.nsupgid>0 && buf.supgrp) freesupgrp(&buf);
}
break;
case TF_show_proc|TF_loose_tasks: // H option
@@ -349,12 +351,16 @@
proc_t buf2;
// must still have the process allocated
while(readtask(ptp,&buf,&buf2)){
- if(!want_this_proc(&buf)) continue;
- show_one_proc(&buf2, task_format_list);
+ if(want_this_proc(&buf)) show_one_proc(&buf2, task_format_list);
+ if(buf2.nsupgid > 0 && buf2.supgid && buf.supgid!=buf2.supgid) free(buf2.supgid);
+ if((ptp->flags & PROC_FILLSUPGRP) && buf2.nsupgid>0 && buf2.supgrp && buf.supgrp!=buf2.supgrp)
+ freesupgrp(&buf2);
}
if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
if(buf.environ) free((void*)*buf.environ); // ought to reuse
if(buf.cgroup) free((void*)*buf.cgroup);
+ if(buf.nsupgid > 0 && buf.supgid) free(buf.supgid);
+ if((ptp->flags & PROC_FILLSUPGRP) && buf.nsupgid>0 && buf.supgrp) freesupgrp(&buf);
}
break;
case TF_show_proc|TF_show_task: // m and -m options
@@ -363,11 +369,18 @@
proc_t buf2;
show_one_proc(&buf, proc_format_list);
// must still have the process allocated
- while(readtask(ptp,&buf,&buf2)) show_one_proc(&buf2, task_format_list);
+ while(readtask(ptp,&buf,&buf2)){
+ show_one_proc(&buf2, task_format_list);
+ if(buf2.nsupgid > 0 && buf2.supgid && buf.supgid!=buf2.supgid) free(buf2.supgid);
+ if(ptp->flags & PROC_FILLSUPGRP && buf2.nsupgid>0 && buf2.supgrp && buf.supgrp!=buf2.supgrp)
+ freesupgrp(&buf2);
+ }
}
if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
if(buf.environ) free((void*)*buf.environ); // ought to reuse
if(buf.cgroup) free((void*)*buf.cgroup);
+ if(buf.nsupgid > 0 && buf.supgid) free(buf.supgid);
+ if((ptp->flags & PROC_FILLSUPGRP) && buf.nsupgid>0 && buf.supgrp) freesupgrp(&buf);
}
break;
case TF_show_task: // -L and -T options
@@ -375,11 +388,18 @@
if(want_this_proc(&buf)){
proc_t buf2;
// must still have the process allocated
- while(readtask(ptp,&buf,&buf2)) show_one_proc(&buf2, task_format_list);
+ while(readtask(ptp,&buf,&buf2)){
+ show_one_proc(&buf2, task_format_list);
+ if(buf2.nsupgid > 0 && buf2.supgid && buf.supgid!=buf2.supgid) free(buf2.supgid);
+ if(ptp->flags & PROC_FILLSUPGRP && buf2.nsupgid>0 && buf2.supgrp && buf.supgrp!=buf2.supgrp)
+ freesupgrp(&buf2);
+ }
}
if(buf.cmdline) free((void*)*buf.cmdline); // ought to reuse
if(buf.environ) free((void*)*buf.environ); // ought to reuse
if(buf.cgroup) free((void*)*buf.cgroup);
+ if(buf.nsupgid > 0 && buf.supgid) free(buf.supgid);
+ if((ptp->flags & PROC_FILLSUPGRP) && buf.nsupgid>0 && buf.supgrp) freesupgrp(&buf);
}
break;
}
@@ -542,6 +562,12 @@
qsort(processes, n, sizeof(proc_t*), compare_two_procs);
if(forest_type) show_forest(n);
else show_proc_array(ptp,n);
+ int i;
+ for (i=0; i<n; i++)
+ if (processes[i]->nsupgid>0 && processes[i]->supgid) free(processes[i]->supgid);
+ if (ptp->flags & PROC_FILLSUPGRP)
+ for (i=0; i<n; i++)
+ if (processes[i]->nsupgid>0 && processes[i]->supgrp) freesupgrp(processes[i]);
closeproc(ptp);
}
--- a/ps/output.c
+++ b/ps/output.c
@@ -211,6 +211,32 @@
return 0;
}
+static int sr_supgid(const proc_t* P, const proc_t* Q){
+ int i;
+ for (i = 0; i < INT_MAX; i++){
+ if (P->nsupgid == i){
+ if (Q->nsupgid == i) return 0;
+ else return -1;
+ }
+ if (Q->nsupgid == i) return 1;
+ if (P->supgid[i] != Q->supgid[i]) return P->supgid[i] - Q->supgid[i];
+ }
+ return 0;
+}
+
+static int sr_supgrp(const proc_t* P, const proc_t* Q){
+ int i;
+ for (i = 0; i < INT_MAX; i++){
+ if (P->nsupgid == i){
+ if (Q->nsupgid == i) return 0;
+ else return -1;
+ }
+ if (Q->nsupgid == i) return 1;
+ int cmp = strncmp(P->supgrp[i],Q->supgrp[i],P_G_SZ);
+ if (cmp != 0) return cmp;
+ }
+ return 0;
+}
/***************************************************************************/
/************ Lots of format functions, starting with the NOP **************/
@@ -1062,6 +1088,24 @@
return snprintf(outbuf, COLWID, "%d", pp->fuid);
}
+static int pr_supgid(char *restrict const outbuf, const proc_t *restrict const pp){
+ if (pp->nsupgid == 0) return snprintf(outbuf,2,"-");
+ int rest = COLWID;
+ int i = 0;
+ for (i = 0; i < pp->nsupgid && rest > 5; i++)
+ rest-= snprintf(outbuf+COLWID-rest, rest, "%d ", pp->supgid[i]);
+ return COLWID-rest;
+}
+
+static int pr_supgrp(char *restrict const outbuf, const proc_t *restrict const pp){
+ if (pp->nsupgid == 0) return snprintf(outbuf,2,"-");
+ int rest = COLWID;
+ int i = 0;
+ for (i = 0; i < pp->nsupgid && rest > sizeof( pp->supgrp[i] ) + 1; i++)
+ rest-= snprintf(outbuf+COLWID-rest, rest, "%s ", pp->supgrp[i]);
+ return COLWID-rest;
+}
+
// The Open Group Base Specifications Issue 6 (IEEE Std 1003.1, 2004 Edition)
// requires that user and group names print as decimal numbers if there is
// not enough room in the column, so tough luck if you don't like it.
@@ -1293,6 +1337,7 @@
#define USR PROC_FILLUSR /* uid_t -> user names */
#define GRP PROC_FILLGRP /* gid_t -> group names */
#define WCH PROC_FILLWCHAN /* do WCHAN lookup */
+#define SUPGRP PROC_FILLSUPGRP /* supgid -> supplementary group names */
#define CGRP PROC_FILLCGROUP /* read cgroup */
/* TODO
@@ -1490,6 +1535,8 @@
{"status", "STATUS", pr_nop, sr_nop, 6, 0, DEC, AN|RIGHT},
{"stime", "STIME", pr_stime, sr_stime, 5, 0, XXX, ET|RIGHT}, /* was 6 wide */
{"suid", "SUID", pr_suid, sr_suid, 5, 0, LNx, ET|RIGHT},
+{"supgid", "SUPGID", pr_supgid, sr_supgid, 27, 0, LNX, PO|UNLIMITED},
+{"supgrp", "SUPGRP", pr_supgrp, sr_supgrp, 27, SUPGRP, LNX, PO|UNLIMITED},
{"suser", "SUSER", pr_suser, sr_suser, 8, USR, LNx, ET|USER},
{"svgid", "SVGID", pr_sgid, sr_sgid, 5, 0, XXX, ET|RIGHT},
{"svgroup", "SVGROUP", pr_sgroup, sr_sgroup, 8, GRP, LNX, ET|USER},
--- a/ps/ps.1
+++ b/ps/ps.1
@@ -1303,6 +1303,16 @@
saved user\ ID. (alias\ \fBsvuid\fR).
T}
+supgid SUPGID T{
+gid of supplementary groups, see
+.BR getgroups (2).
+T}
+
+supgrp SUPGRP T{
+names of supplementary groups, see
+.BR getgroups (2).
+T}
+
suser SUSER T{
saved user name. This will be the textual user\ ID,
if\ it can be obtained and the field width permits,

View file

@ -1,25 +0,0 @@
Author: Craig Small <csmall@debian.org>
Description: readproc.c some type conversion help
return if unable to open /proc
Index: b/proc/readproc.c
===================================================================
--- a/proc/readproc.c 2009-11-24 20:53:03.000000000 +1100
+++ b/proc/readproc.c 2009-11-24 21:00:41.000000000 +1100
@@ -173,7 +173,7 @@
// examine a field name (hash and compare)
base:
if(unlikely(!*S)) break;
- entry = table[63 & (asso[S[3]] + asso[S[2]] + asso[S[0]])];
+ entry = table[63 & (asso[(int)S[3]] + asso[(int)S[2]] + asso[(int)S[0]])];
colon = strchr(S, ':');
if(unlikely(!colon)) break;
if(unlikely(colon[1]!='\t')) break;
@@ -942,6 +942,8 @@
else
PT = openproc(flags);
va_end(ap);
+ if (!PT)
+ return 0;
do { /* read table: */
tab = xrealloc(tab, (n+1)*sizeof(proc_t*));/* realloc as we go, using */
tab[n] = readproc_direct(PT, NULL); /* final null to terminate */

View file

@ -1,21 +0,0 @@
Description: zeros out reused structures to stop double free problems
Bug-Debian: http://bugs.debian.org/550009
Author: Arnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
--- a/proc/readproc.c
+++ b/proc/readproc.c
@@ -828,6 +828,7 @@
saved_p = p;
if(!p) p = xcalloc(p, sizeof *p); /* passed buf or alloced mem */
+ else memset(p, 0, sizeof *p);
for(;;){
// fills in the path, plus p->tid and p->tgid
@@ -856,6 +857,7 @@
saved_t = t;
if(!t) t = xcalloc(t, sizeof *t); /* passed buf or alloced mem */
+ else memset(t, 0, sizeof *t);
// 1. got to fake a thread for old kernels
// 2. for single-threaded processes, this is faster (but must patch up stuff that differs!)

View file

@ -1,69 +0,0 @@
fix_Makefile.diff
slabtop_once.patch
free.1.patch
output_sort_time.patch
pmap.1.patch
10_ps.1.patch
skill.1.patch
skill_perror.patch
slabtop_1.patch
sysctl.8.patch
sysctl_options.patch
tload.1.patch
top_irix.patch
top_no_openproc.patch
top_stdin_eof.patch
top_uid_length.patch
uptime.1.patch
vmstat.8.patch
watch.1.patch
w_time.patch
kill.1.patch
kill_warncr.patch
module_mk_shared.patch
sysinfo_elfnote.patch
top.1.patch
top_c_resize.patch
w-bassman.patch
top.1_cpustates.patch
watch_8bitchar.patch
library_map_freeproc.patch
pgrep_start_time.patch
readproc_c.patch
sysinfo_7_numbers.patch
tload_no_optargs.patch
w.1.patch
w_columns.patch
watch_exec_beep.patch
path_max.patch
w_envlength.patch
gnu-kbsd-version.patch
pgrep_c_option.patch
ps_cgroup_display.patch
watch_precision_time.patch
watch_unicode.patch
complain_unmounted_proc.patch
ps_supgid_display.patch
makefile_dev_null.patch
pgrep.1.patch
ps_size_sz.patch
top_mintime.patch
vmstat_headers.patch
pgrep_usage_exitcode.patch
ps_1_options.patch
top_highlight.patch
top_nohz.patch
vmstat_part_format.patch
readproc_double_free.patch
vmstat_units.patch
skill_null_argv.patch
skill_multiarg.patch
proc_version_constructor.patch
pmaps_smaps.patch
top_numeric_args.patch
top_1_swap.patch
w_userproc.patch
sysinfo_kfreebsd_hertz.patch
ps_1_flt_output.patch
watch_ansi_colour.patch
top_username_parse.patch

View file

@ -1,116 +0,0 @@
Description: Cleanup man page #282168
Bug-Debian: http://bugs.debian.org/282168
Author: Brendan O'Dea <bod@debian.org>
Reviewed-by: Craig Small <csmall@debian.org>
Index: b/skill.1
===================================================================
--- a/skill.1 2009-11-24 20:53:05.000000000 +1100
+++ b/skill.1 2009-11-24 21:00:31.000000000 +1100
@@ -11,37 +11,38 @@
skill, snice \- send a signal or report process status
.SH SYNOPSIS
-.nf
-skill [signal to send] [options] process selection criteria
-snice [new priority] [options] process selection criteria
-.fi
+.B skill
+.RI [ "signal to send" ]
+.RI [ options ]
+.I process selection criteria
+.br
+.B snice
+.RI [ "new priority" ]
+.RI [ options ]
+.I process selection criteria
.SH DESCRIPTION
These tools are probably obsolete and unportable. The command
syntax is poorly defined. Consider using the killall, pkill,
and pgrep commands instead.
-The default signal for skill is TERM. Use -l or -L to list available signals.
+The default signal for skill is TERM. Use \-l or \-L to list available signals.
Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0.
-Alternate signals may be specified in three ways: -9 -SIGKILL -KILL.
+Alternate signals may be specified in three ways: \-9 \-SIGKILL \-KILL.
The default priority for snice is +4. (snice +4 ...)
-Priority numbers range from +20 (slowest) to -20 (fastest).
+Priority numbers range from +20 (slowest) to \-20 (fastest).
Negative priority numbers are restricted to administrative users.
.SH "GENERAL OPTIONS"
.TS
-l l l.
--f fast mode This is not currently useful.
--i interactive use T{
-You will be asked to approve each action.
-T}
--v verbose output T{
-Display information about selected processes.
-T}
--w warnings enabled This is not currently useful.
--n no action This only displays the process ID.
--V show version Displays version of program.
+lB l l.
+\-f fast mode This is not currently useful.
+\-i interactive use You will be asked to approve each action.
+\-v verbose output Display information about selected processes.
+\-w warnings enabled This is not currently useful.
+\-n no action This only displays the process ID.
+\-V show version Displays version of program.
.TE
.SH "PROCESS SELECTION OPTIONS"
@@ -49,11 +50,11 @@
The options below may be used to ensure correct interpretation.
Do not blame Albert for this interesting interface.
.TS
-l l.
--t The next argument is a terminal (tty or pty).
--u The next argument is a username.
--p The next argument is a process ID number.
--c The next argument is a command name.
+lB l.
+\-t The next argument is a terminal (tty or pty).
+\-u The next argument is a username.
+\-p The next argument is a process ID number.
+\-c The next argument is a command name.
.TE
.SH SIGNALS
@@ -63,7 +64,6 @@
lB rB lB lB
lfCW r l l.
Name Num Action Description
-.TH
0 0 n/a exit code indicates if a signal may be sent
ALRM 14 exit
HUP 1 exit
@@ -104,15 +104,20 @@
lB lB
lfCW l.
Command Description
-.TC
snice seti crack +7 Slow down seti and crack
-skill -KILL -v /dev/pts/* Kill users on new-style PTY devices
-skill -STOP viro lm davem Stop 3 users
-snice -17 root bash Give priority to root's shell
+skill \-KILL \-v /dev/pts/* Kill users on new-style PTY devices
+skill \-STOP viro lm davem Stop 3 users
+snice \-17 root bash Give priority to root's shell
.TE
.SH "SEE ALSO"
-killall(1) pkill(1) kill(1) renice(1) nice(1) signal(7) kill(2)
+.BR killall (1),
+.BR pkill (1),
+.BR kill (1),
+.BR renice (1),
+.BR nice(1),
+.BR kill(2),
+.BR signal(7)
.SH STANDARDS
No standards apply.

View file

@ -1,18 +0,0 @@
Description: Fixed -v and -i and other flags in skill/snice
There was a too greedy option parser
Patch based on submitted patch by Yoshio Nakamura
Bug-Debian: http://bugs.debian.org/331419
Bug-Debian: http://bugs.debian.org/569030
Author: Craig Small <csmall@debian.org>
--- a/skill.c
+++ b/skill.c
@@ -464,6 +464,8 @@
switch(force){ /* fall through each data type */
default: skillsnice_usage();
case 0: /* not forced */
+ if (argptr && argptr[0] == '-') /* its the next argument not a parameter */
+ continue;
case 't':
if(argc){
struct stat sbuf;

View file

@ -1,14 +0,0 @@
Author: WANG Yunfeng <uhuruh@gmail.com>
Description: Don't treat skill null parameter as 0
Bug-Debian: http://bugs.debian.org/551173
--- a/skill.c
+++ b/skill.c
@@ -307,7 +307,7 @@
long pid;
char *endp;
pid = strtol(argv[argc],&endp,10);
- if(!*endp){
+ if(!*endp && (endp != argv[argc])){
if(!kill((pid_t)pid,signo)) continue;
// The UNIX standard contradicts itself. If at least one process
// is matched for each PID (as if processes could share PID!) and

View file

@ -1,16 +0,0 @@
Description: kill prints perror
Author: Justin Pryzby <justinpryzby@users.sourceforge.net>
Bug-Debian: http://bugs.debian.org/468363
Reviewed-by: Craig Small <csmall@debian.org>
Index: b/skill.c
===================================================================
--- a/skill.c 2009-11-24 20:53:05.000000000 +1100
+++ b/skill.c 2009-11-24 21:00:31.000000000 +1100
@@ -317,6 +317,7 @@
// The standard says we return non-zero if an error occurs. Thus if
// killing two processes gives 0 for one and EPERM for the other,
// we are required to return both zero and non-zero. Quantum kill???
+ perror("kill");
exitvalue = 1;
continue;
}

View file

@ -1,97 +0,0 @@
Description: Cleanup slabtop man page
Author: Brendan O'Dea <bod@debian.org>
Bug-Debian: http://bugs.debian.org/282168
Reviewed-by: Craig Small <csmall@debian.org>
Index: b/slabtop.1
===================================================================
--- a/slabtop.1 2009-11-24 20:53:05.000000000 +1100
+++ b/slabtop.1 2009-11-24 21:00:32.000000000 +1100
@@ -7,36 +7,39 @@
slabtop \- display kernel slab cache information in real time
.SH SYNOPSIS
-.BI "slabtop [ " options " ] "
+.B slabtop
+.RI [ options ]
.SH DESCRIPTION
-.BR slabtop (1)
+.B slabtop
displays detailed kernel slab cache information in real time. It displays a
listing of the top caches sorted by one of the listed sort criteria. It also
displays a statistics header filled with slab layer information.
.SH OPTIONS
Normal invocation of
-.BR slabtop (1)
+.B slabtop
does not require any options. The behavior, however, can be fine-tuned by
specifying one or more of the following flags:
.TP
-.B \-\^\-delay=n, \-d n
-Refresh the display every n seconds. By default,
-.BR slabtop (1)
+.B \-\-delay=\fIn\fR, \fB\-d \fIn
+Refresh the display every
+.I n
+in seconds. By default,
+.B slabtop
refreshes the display every three seconds. To exit the program, hit
.BR q.
.TP
-.B \-\^\-sort=S, \-s S
-Sort by S, where S is one of the sort criteria.
+.B \-\-sort=\fIS\fR, \fB\-s\fR \fIS
+Sort by \fIS\fR, where \fIS\fR is one of the sort criteria.
.TP
-.B \-\^\-once, \-o
+.B \-\-once\fR, \fB\-o
Display the output once and then exit.
.TP
-.B \-\^\-version, \-V
+.B \-\-version\fR, \fB\-V
Display version information and exit.
.TP
-.B \-\^\-help
+.B \-\-help
Display usage information and exit.
.SH SORT CRITERIA
@@ -78,7 +81,7 @@
sort by cache utilization
.SH COMMANDS
-.BR slabtop (1)
+.B slabtop
accepts keyboard commands from the user during use. The following are
supported. In the case of letters, both cases are accepted.
@@ -94,7 +97,9 @@
Quit the program.
.SH FILES
-.IR /proc/slabinfo " \-\- slab information"
+.TP
+.I /proc/slabinfo
+slab information
.SH "SEE ALSO"
.BR free (1),
@@ -104,7 +109,7 @@
.SH NOTES
Currently,
-.BR slabtop (1)
+.B slabtop
requires a 2.4 or later kernel (specifically, a version 1.1 or later
.IR /proc/slabinfo ).
Kernel 2.2 should be supported in the future.
@@ -116,7 +121,7 @@
.SH AUTHORS
Written by Chris Rivera and Robert Love.
-.BR slabtop (1)
+.B slabtop
was inspired by Martin Bligh's perl script,
.BR vmtop .
The procps package is maintained by Albert Cahalan <albert@users.sf.net>.

View file

@ -1,116 +0,0 @@
Description: Don't use ncurses for running once
Using ncurses initscr/endwin clears the screen for xterm/etc it
now prints raw text using printf
Bug-Debian: http://bugs.debian.org/503089
Author: Craig Small <csmall@debian.org>
--- a/slabtop.c
+++ b/slabtop.c
@@ -268,11 +268,13 @@
}
}
+#define print_line(fmt, args...) if (run_once) printf(fmt, ## args); else printw(fmt, ## args)
int main(int argc, char *argv[])
{
int o;
unsigned short old_rows;
struct slab_info *slab_list = NULL;
+ int run_once=0;
struct option longopts[] = {
{ "delay", 1, NULL, 'd' },
@@ -306,6 +308,7 @@
sort_func = set_sort_func(optarg[0]);
break;
case 'o':
+ run_once=1;
delay = 0;
break;
case 'V':
@@ -322,11 +325,13 @@
if (tcgetattr(0, &saved_tty) == -1)
perror("tcgetattr");
- initscr();
- term_size(0);
old_rows = rows;
- resizeterm(rows, cols);
- signal(SIGWINCH, term_size);
+ term_size(0);
+ if (!run_once) {
+ initscr();
+ resizeterm(rows, cols);
+ signal(SIGWINCH, term_size);
+ }
signal(SIGINT, sigint_handler);
do {
@@ -340,13 +345,13 @@
if (get_slabinfo(&slab_list, &stats))
break;
- if (old_rows != rows) {
+ if (!run_once && old_rows != rows) {
resizeterm(rows, cols);
old_rows = rows;
}
move(0,0);
- printw( " Active / Total Objects (%% used) : %d / %d (%.1f%%)\n"
+ print_line( " Active / Total Objects (%% used) : %d / %d (%.1f%%)\n"
" Active / Total Slabs (%% used) : %d / %d (%.1f%%)\n"
" Active / Total Caches (%% used) : %d / %d (%.1f%%)\n"
" Active / Total Size (%% used) : %.2fK / %.2fK (%.1f%%)\n"
@@ -361,14 +366,14 @@
slab_list = slabsort(slab_list);
attron(A_REVERSE);
- printw( "%6s %6s %4s %8s %6s %8s %10s %-23s\n",
+ print_line( "%6s %6s %4s %8s %6s %8s %10s %-23s\n",
"OBJS", "ACTIVE", "USE", "OBJ SIZE", "SLABS",
"OBJ/SLAB", "CACHE SIZE", "NAME");
attroff(A_REVERSE);
curr = slab_list;
for (i = 0; i < rows - 8 && curr->next; i++) {
- printw("%6u %6u %3u%% %7.2fK %6u %8u %9uK %-23s\n",
+ print_line("%6u %6u %3u%% %7.2fK %6u %8u %9uK %-23s\n",
curr->nr_objs, curr->nr_active_objs, curr->use,
curr->obj_size / 1024.0, curr->nr_slabs,
curr->objs_per_slab, (unsigned)(curr->cache_size / 1024),
@@ -376,22 +381,24 @@
curr = curr->next;
}
- refresh();
put_slabinfo(slab_list);
- FD_ZERO(&readfds);
- FD_SET(0, &readfds);
- tv.tv_sec = delay;
- tv.tv_usec = 0;
- if (select(1, &readfds, NULL, NULL, &tv) > 0) {
- if (read(0, &c, 1) != 1)
- break;
- parse_input(c);
- }
+ if (!run_once) {
+ refresh();
+ FD_ZERO(&readfds);
+ FD_SET(0, &readfds);
+ tv.tv_sec = delay;
+ tv.tv_usec = 0;
+ if (select(1, &readfds, NULL, NULL, &tv) > 0) {
+ if (read(0, &c, 1) != 1)
+ break;
+ parse_input(c);
+ }
+ }
} while (delay);
tcsetattr(0, TCSAFLUSH, &saved_tty);
free_slabinfo(slab_list);
- endwin();
+ if (!run_once) endwin();
return 0;
}

View file

@ -1,147 +0,0 @@
Author: <csmall@debian.org>
Description: -p flag has OPTIONAL filename
cleanup sysctl man page
Bug-Debian: http://bugs.debian.org/297144
Bug-Debian: http://bugs.debian.org/282168
Index: b/sysctl.8
===================================================================
--- a/sysctl.8 2009-11-24 20:53:05.000000000 +1100
+++ b/sysctl.8 2009-11-24 21:00:32.000000000 +1100
@@ -10,76 +10,108 @@
.SH NAME
sysctl \- configure kernel parameters at runtime
.SH SYNOPSIS
-.B "sysctl [-n] [-e] variable ..."
+.B sysctl
+.RB [ \-n ]
+.RB [ \-e ]
+.I variable
+\&...
.br
-.B "sysctl [-n] [-e] [-q] -w variable=value ..."
+.B sysctl
+.RB [ \-n ]
+.RB [ \-e ]
+.RB [ \-q ]
+.B \-w
+.IR variable = value
+\&...
.br
-.B "sysctl [-n] [-e] [-q] -p <filename>"
+.B sysctl
+.RB [ \-n ]
+.RB [ \-e ]
+.RB [ \-q ]
+.B \-p
+.RI [ filename ]
.br
-.B "sysctl [-n] [-e] -a"
+.B sysctl
+.RB [ \-n ]
+.RB [ \-e ]
+.B \-a
.br
-.B "sysctl [-n] [-e] -A"
+.B sysctl
+.RB [ \-n ]
+.RB [ \-e ]
+.B \-A
.SH DESCRIPTION
.B sysctl
is used to modify kernel parameters at runtime. The parameters available
are those listed under /proc/sys/. Procfs is required for
-.B sysctl(8)
+.B sysctl
support in Linux. You can use
-.B sysctl(8)
+.B sysctl
to both read and write sysctl data.
.SH PARAMETERS
.TP
-.B "variable"
+.I variable
The name of a key to read from. An example is kernel.ostype. The '/'
separator is also accepted in place of a '.'.
.TP
-.B "variable=value"
-To set a key, use the form variable=value, where variable is the key and
-value is the value to set it to. If the value contains quotes or characters
+.IR variable = value
+To set a key, use the form
+.IR variable = value
+where
+.I variable
+is the key and
+.I value
+is the value to set it to. If the value contains quotes or characters
which are parsed by the shell, you may need to enclose the value in double
-quotes. This requires the -w parameter to use.
+quotes. This requires the
+.B \-w
+parameter to use.
.TP
-.B "-n"
+.B \-n
Use this option to disable printing of the key name when printing values.
.TP
-.B "-e"
+.B \-e
Use this option to ignore errors about unknown keys.
.TP
-.B "-N"
+.B \-N
Use this option to only print the names. It may be useful with shells that
have programmable completion.
.TP
-.B "-q"
+.B \-q
Use this option to not display the values set to stdout.
.TP
-.B "-w"
+.B \-w
Use this option when you want to change a sysctl setting.
.TP
-.B "-p"
+.B \-p
Load in sysctl settings from the file specified or /etc/sysctl.conf if none given.
Specifying \- as filename means reading data from standard input.
.TP
-.B "-a"
+.B \-a
Display all values currently available.
.TP
-.B "-A"
+.B \-A
Display all values currently available in table form.
.SH EXAMPLES
-.TP
-/sbin/sysctl -a
-.TP
-/sbin/sysctl -n kernel.hostname
-.TP
-/sbin/sysctl -w kernel.domainname="example.com"
-.TP
-/sbin/sysctl -p /etc/sysctl.conf
+/sbin/sysctl \-a
+.br
+/sbin/sysctl \-n kernel.hostname
+.br
+/sbin/sysctl \-w kernel.domainname="example.com"
+.br
+/sbin/sysctl \-p /etc/sysctl.conf
.SH FILES
.I /proc/sys
+.br
.I /etc/sysctl.conf
.SH SEE ALSO
.BR sysctl.conf (5)
.SH BUGS
-The -A parameter behaves just as -a does.
+The
+.B \-A
+parameter behaves just as
+.B \-a
+does.
.SH AUTHOR
George Staikos, <staikos@0wned.org>

View file

@ -1,46 +0,0 @@
Author: <csmall@debian.org>
Description: Fix up some option processing
Index: b/sysctl.c
===================================================================
--- a/sysctl.c 2009-11-24 20:53:05.000000000 +1100
+++ b/sysctl.c 2009-11-24 21:00:33.000000000 +1100
@@ -421,6 +421,7 @@
const char *me = (const char *)basename(argv[0]);
bool SwitchesAllowed = true;
bool WriteMode = false;
+ bool DisplayAllOpt = false;
int ReturnCode = 0;
const char *preloadfile = DEFAULT_PRELOAD;
@@ -486,8 +487,8 @@
case 'a': // string and integer values (for Linux, all of them)
case 'A': // same as -a -o
case 'X': // same as -a -x
- SwitchesAllowed = false;
- return DisplayAll(PROC_PATH);
+ DisplayAllOpt = true;
+ break;
case 'V':
fprintf(stdout, "sysctl (%s)\n",procps_version);
exit(0);
@@ -502,6 +503,8 @@
} else {
if (NameOnly && Quiet) // nonsense
return Usage(me);
+ if (DisplayAllOpt) // We cannot have values with -a
+ return Usage(me);
SwitchesAllowed = false;
if (WriteMode || index(*argv, '='))
ReturnCode = WriteSetting(*argv);
@@ -509,6 +512,11 @@
ReturnCode = ReadSetting(*argv);
}
}
+ if (DisplayAllOpt) {
+ if (Quiet)
+ return Usage(me);
+ return DisplayAll(PROC_PATH);
+ }
return ReturnCode;
}

View file

@ -1,36 +0,0 @@
Author: Craig Small <csmall@debian.org>
Description: Adds up 7 cpu numbers not 4
Bug-Debian: http://bugs.debian.org/460331
Index: b/proc/sysinfo.c
===================================================================
--- a/proc/sysinfo.c 2009-11-24 21:00:38.000000000 +1100
+++ b/proc/sysinfo.c 2009-11-24 21:00:42.000000000 +1100
@@ -124,24 +124,25 @@
unsigned long long Hertz;
static void old_Hertz_hack(void){
- unsigned long long user_j, nice_j, sys_j, other_j; /* jiffies (clock ticks) */
+ unsigned long long user_j, nice_j, sys_j, other_j, wait_j, hirq_j, sirq_j, stol_j; /* jiffies (clock ticks) */
double up_1, up_2, seconds;
unsigned long long jiffies;
unsigned h;
char *restrict savelocale;
+ wait_j = hirq_j = sirq_j = stol_j = 0;
savelocale = setlocale(LC_NUMERIC, NULL);
setlocale(LC_NUMERIC, "C");
do{
FILE_TO_BUF(UPTIME_FILE,uptime_fd); sscanf(buf, "%lf", &up_1);
/* uptime(&up_1, NULL); */
FILE_TO_BUF(STAT_FILE,stat_fd);
- sscanf(buf, "cpu %Lu %Lu %Lu %Lu", &user_j, &nice_j, &sys_j, &other_j);
+ sscanf(buf, "cpu %Lu %Lu %Lu %Lu %Lu %Lu %Lu %Lu", &user_j, &nice_j, &sys_j, &other_j, &wait_j, &hirq_j, &sirq_j, &stol_j);
FILE_TO_BUF(UPTIME_FILE,uptime_fd); sscanf(buf, "%lf", &up_2);
/* uptime(&up_2, NULL); */
} while((long long)( (up_2-up_1)*1000.0/up_1 )); /* want under 0.1% error */
setlocale(LC_NUMERIC, savelocale);
- jiffies = user_j + nice_j + sys_j + other_j;
+ jiffies = user_j + nice_j + sys_j + other_j + wait_j + hirq_j + sirq_j + stol_j ;
seconds = (up_1 + up_2) / 2;
h = (unsigned)( (double)jiffies/seconds/smp_num_cpus );
/* actual values used by 2.4 kernels: 32 64 100 128 1000 1024 1200 */

View file

@ -1,23 +0,0 @@
Description: Find AT_CLKTCK elf note only on Linux
Author: Petr Salinger <Petr.Salinger@seznam.cz>
Bug-Debian: http://bugs.debian.org/378157
Reviewed-by: Craig Small <csmall@debian.org>
Index: b/proc/sysinfo.c
===================================================================
--- a/proc/sysinfo.c 2009-11-24 20:53:04.000000000 +1100
+++ b/proc/sysinfo.c 2009-11-24 21:00:38.000000000 +1100
@@ -221,12 +221,13 @@
// _SC_NPROCESSORS_ONLN returns 1, which should work OK
smp_num_cpus = sysconf(_SC_NPROCESSORS_ONLN);
if(smp_num_cpus<1) smp_num_cpus=1; /* SPARC glibc is buggy */
-
+#ifdef __linux__
if(linux_version_code > LINUX_VERSION(2, 4, 0)){
Hertz = find_elf_note(AT_CLKTCK);
if(Hertz!=NOTE_NOT_FOUND) return;
fputs("2.4+ kernel w/o ELF notes? -- report this\n", stderr);
}
+#endif
old_Hertz_hack();
}

View file

@ -1,20 +0,0 @@
Description: Fix Hertz calculation for kfreebsd
Bug-Debian: http://bugs.debian.org/460331
Author: Petr Salinger
--- a/proc/sysinfo.c
+++ b/proc/sysinfo.c
@@ -230,6 +230,14 @@
fputs("2.4+ kernel w/o ELF notes? -- report this\n", stderr);
}
#endif
+#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
+ /* On FreeBSD the Hertz hack is unrelaible, there is no ELF note and
+ * Hertz isn't defined in asm/params.h
+ * See Debian Bug #460331
+ */
+ Hertz = 100;
+ return;
+#endif
old_Hertz_hack();
}

View file

@ -1,15 +0,0 @@
Author: <csmall@debian.org>
Description: Reword tload.1 man page for the alarm
Index: b/tload.1
===================================================================
--- a/tload.1 2009-11-24 20:53:05.000000000 +1100
+++ b/tload.1 2009-11-24 21:00:33.000000000 +1100
@@ -39,7 +39,7 @@
.BI "\-d" " delay"
option sets the time argument for an
.BR alarm (2);
-if -d 0 is specified, the alarm is set to 0, which will never send the
+if \-d 0 is specified, the alarm is set to 0, which will never send the
.B SIGALRM
and update the display.

View file

@ -1,16 +0,0 @@
Author: Craig Small <csmall@debian.org>
Description: Removed unneeded optarg and optind variables form tload.c
Index: b/tload.c
===================================================================
--- a/tload.c 2009-11-24 20:53:03.000000000 +1100
+++ b/tload.c 2009-11-24 21:00:42.000000000 +1100
@@ -30,9 +30,6 @@
static int dly=5;
static jmp_buf jb;
-extern int optind;
-extern char *optarg;
-
static void alrm(int signo)
{
(void)signo;

View file

@ -1,416 +0,0 @@
Description: Fix bold in top manual page
Fix page fault description because storage may not be disk
Author: Craig Small <csmall@debian.org>
Index: b/top.1
===================================================================
--- a/top.1 2009-11-24 20:53:04.000000000 +1100
+++ b/top.1 2009-11-24 21:00:38.000000000 +1100
@@ -42,7 +42,7 @@
.ds EM \ \fB\-\-\ \fR
\# - these two are for chuckles, makes great grammar
.ds Me top
-.ds ME \fBtop\fR
+.ds NE \fBtop\fR
\# - other misc strings for consistent usage/emphasis
.ds F \fIOff\fR
.ds O \fIOn\fR
@@ -85,7 +85,7 @@
.\" ----------------------------------------------------------------------
.SH SYNOPSIS
.\" ----------------------------------------------------------------------
-\*(ME \-\fBhv\fR | \-\fBbcHisS\fR \-\fBd\fI delay\fR \-\fBn\fI
+\*(NE \-\fBhv\fR | \-\fBbcHisS\fR \-\fBd\fI delay\fR \-\fBn\fI
iterations\fR \-\fBp\fI pid\fR [,\fI pid\fR ...]
The traditional switches '-' and whitespace are optional.
@@ -94,7 +94,7 @@
.\" ----------------------------------------------------------------------
.SH DESCRIPTION
.\" ----------------------------------------------------------------------
-The \*(ME program provides a dynamic real-time view of a running system.
+The \*(NE program provides a dynamic real-time view of a running system.
It can display\fB system\fR summary information as well as a list of\fB
tasks\fR currently being managed by the Linux kernel.
The types of system summary information shown and the types, order and
@@ -104,7 +104,7 @@
The program provides a limited interactive interface for process
manipulation as well as a much more extensive interface for personal
configuration \*(EM encompassing every aspect of its operation.
-And while \*(ME is referred to throughout this document, you are free
+And while \*(NE is referred to throughout this document, you are free
to name the program anything you wish.
That new name, possibly an alias, will then be reflected on \*(Me's display
and used when reading and writing a \*(CF.
@@ -190,7 +190,7 @@
'I' - Irix mode On\ \ (no, 'solaris' smp)
* 'p' - PID monitoring Off
* 's' - Secure mode Off (unsecured)
- 'B' - Bold disable Off
+ 'B' - Bold enable Off
\fISummary_Area_defaults\fR
'l' - Load Avg/Uptime On\ \ (thus program name)
't' - Task/Cpu states On\ \ (1+1 lines, see '1')
@@ -413,16 +413,14 @@
q:\fB RES\fR \*(EM Resident size (kb)
The non-swapped \*(MP a task has used.
-RES = CODE + DATA.
-
.TP 3
r:\fB CODE\fR \*(EM Code size (kb)
-The amount of \*(MP devoted to executable code, also known as
+The amount of \*(MV devoted to executable code, also known as
the 'text resident set' size or TRS.
.TP 3
s:\fB DATA\fR \*(EM Data+Stack size (kb)
-The amount of \*(MP devoted to other than executable code, also known as
+The amount of \*(MV devoted to other than executable code, also known as
the 'data resident set' size or DRS.
.TP 3
@@ -436,8 +434,8 @@
The number of\fB major\fR page faults that have occurred for a task.
A page fault occurs when a process attempts to read from or write to a virtual
page that is not currently present in its address space.
-A major page fault is when disk access is involved in making that
-page available.
+A major page fault is when backing storage access (such as a disk) is involved
+in making that page available.
.TP 3
v:\fB nDRT\fR \*(EM Dirty Pages count
@@ -504,7 +502,7 @@
.\" ......................................................................
.SS 2b. SELECTING and ORDERING Columns
.\" ----------------------------------------------------------------------
-After pressing the \*(CIs 'f' (Fields select) or \'o' (Order fields) you will
+After pressing the \*(CIs 'f' (Fields select) or 'o' (Order fields) you will
be shown a screen containing the current \fBfields string\fR followed by names
and descriptions for all fields.
@@ -580,7 +578,7 @@
see current status,
.TP 7
-\ \ \'\fB?\fR\' or \'\fBh\fR\' :\fIHelp\fR
+\ \ \<\fB?\fR\> or \<\fBh\fR\> :\fIHelp\fR
There are two help levels available.
The first will provide a reminder of all the basic \*(CIs.
If \*(Me is\fI secured\fR, that screen will be abbreviated.
@@ -589,7 +587,7 @@
applicable to \*(AM.
.TP 7
-\ \ \'\fB=\fR\' :\fIExit_Task_Limits\fR
+\ \ \<\fB=\fR\> :\fIExit_Task_Limits\fR
Removes restrictions on which tasks are shown.
This command will reverse any 'i' (idle tasks) and 'n' (max tasks) commands
that might be active.
@@ -599,13 +597,13 @@
When operating in \*(AM this command has a slightly broader meaning.
.TP 7
-\ \ \'\fBA\fR\' :\fIAlternate_Display_Mode_toggle\fR
+\ \ \<\fBA\fR\> :\fIAlternate_Display_Mode_toggle\fR
This command will switch between \*(FM and \*(AM.
-\*(XT 4. ALTERNATE\-DISPLAY Mode and the 'G' \*(CI for insight into
-\*(CWs and field groups.
+\*(XT 4. ALTERNATE\-DISPLAY Mode and the 'G' \*(CI for insight
+into \*(CWs and field groups.
.TP 7
-\ \ \'\fBB\fR\' :\fIBold_Disable/Enable_toggle\fR
+\ \ \<\fBB\fR\> :\fIBold_Disable/Enable_toggle\fR
This command will influence use of the 'bold' terminfo capability and
alters\fB both\fR the \*(SA and \*(TA for the \*(CW.
While it is intended primarily for use with dumb terminals, it can be
@@ -617,7 +615,7 @@
there will be no visual confirmation that they are even on.
.TP 7
-*\ \'\fBd\fR\' or \'\fBs\fR\' :\fIChange_Delay_Time_interval\fR
+*\ \<\fBd\fR\> or \<\fBs\fR\> :\fIChange_Delay_Time_interval\fR
You will be prompted to enter the delay time, in seconds, between
display updates.
@@ -631,32 +629,32 @@
and view the system summary on the second line.
.TP 7
-\ \ \'\fBG\fR\' :\fIChoose_Another_Window/Field_Group\fR
+\ \ \<\fBG\fR\> :\fIChoose_Another_Window/Field_Group\fR
You will be prompted to enter a number between 1 and 4 designating the
window/field group which should be made the \*(CW.
You will soon grow comfortable with these 4 windows, especially after
experimenting with \*(AM.
.TP 7
-\ \ \'\fBI\fR\' :\fIIrix/Solaris_Mode_toggle\fR
+\ \ \<\fBI\fR\> :\fIIrix/Solaris_Mode_toggle\fR
When operating in 'Solaris mode' ('I' toggled \*F), a task's \*(Pu usage
will be divided by the total number of \*(PUs.
After issuing this command, you'll be informed of the new state of this toggle.
.TP 7
-\ \ \'\fBu\fR\' :\fIselect a user\fR
+\ \ \<\fBu\fR\> :\fIselect a user\fR
You will be prompted for a UID or username. Only processes
belonging to the selected user will be displayed. This option
matches on the effective UID.
.TP 7
-\ \ \'\fBU\fR\' :\fIselect a user\fR
+\ \ \<\fBU\fR\> :\fIselect a user\fR
You will be prompted for a UID or username. Only processes
belonging to the selected user will be displayed. This option
matches on the real, effective, saved, and filesystem UID.
.TP 7
-*\ \'\fBk\fR\' :\fIKill_a_task\fR
+*\ \<\fBk\fR\> :\fIKill_a_task\fR
You will be prompted for a PID and then the signal to send.
The default signal, as reflected in the prompt, is SIGTERM.
However, you can send any signal, via number or name.
@@ -667,24 +665,24 @@
2) at the signal prompt, type 0
.TP 7
-\ \ \'\fBq\fR\' :\fIQuit\fR
+\ \ \<\fBq\fR\> :\fIQuit\fR
.TP 7
-*\ \'\fBr\fR\' :\fIRenice_a_Task\fR
+*\ \<\fBr\fR\> :\fIRenice_a_Task\fR
You will be prompted for a PID and then the value to nice it to.
Entering a positive value will cause a process to lose priority.
Conversely, a negative value will cause a process to be viewed more
favorably by the kernel.
.TP 7
-\ \ \'\fBW\fR\' :\fIWrite_the_Configuration_File\fR
+\ \ \<\fBW\fR\> :\fIWrite_the_Configuration_File\fR
This will save all of your options and toggles plus the current
display mode and delay time.
By issuing this command just before quitting \*(Me, you will be able restart
later in exactly that same state.
.TP 7
-\ \ \'\fBZ\fR\' :\fIChange_Color_Mapping
+\ \ \<\fBZ\fR\> :\fIChange_Color_Mapping
This key will take you to a separate screen where you can change the
colors for the \*(CW, or for all windows.
For details regarding this \*(CI \*(Xt 3d. COLOR Mapping.
@@ -700,25 +698,25 @@
of messages and prompts.
These commands always impact just the \*(CW/field group.
-\*(XT 4. ALTERNATE\-DISPLAY Mode and the 'G' \*(CI for insight into
-\*(CWs and field groups.
+\*(XT 4. ALTERNATE\-DISPLAY Mode and the 'G' \*(CI for insight
+into \*(CWs and field groups.
.TP 7
-\ \ \'\fBl\fR\' :\fIToggle_Load_Average/Uptime\fR \*(EM On/Off
+\ \ \<\fBl\fR\> :\fIToggle_Load_Average/Uptime\fR \*(EM On/Off
This is also the line containing the program name (possibly an alias) when
operating in \*(FM or the \*(CW name when operating in \*(AM.
.TP 7
-\ \ \'\fBm\fR\' :\fIToggle_Memory/Swap_Usage\fR \*(EM On/Off
+\ \ \<\fBm\fR\> :\fIToggle_Memory/Swap_Usage\fR \*(EM On/Off
This command affects two \*(SA lines.
.TP 7
-\ \ \'\fBt\fR\' :\fIToggle_Task/Cpu_States\fR \*(EM On/Off
+\ \ \<\fBt\fR\> :\fIToggle_Task/Cpu_States\fR \*(EM On/Off
This command affects from 2 to many \*(SA lines, depending on the state
of the '1' toggle and whether or not \*(Me is running under true SMP.
.TP 7
-\ \ \'\fB1\fR\' :\fIToggle_Single/Separate_Cpu_States\fR \*(EM On/Off
+\ \ \<\fB1\fR\> :\fIToggle_Single/Separate_Cpu_States\fR \*(EM On/Off
This command affects how the 't' command's Cpu States portion is shown.
Although this toggle exists primarily to serve massively-parallel SMP machines,
it is not restricted to solely SMP environments.
@@ -750,12 +748,12 @@
.in
.TP 7
-\ \ \'\fBb\fR\' :\fIBold/Reverse_toggle\fR
+\ \ \<\fBb\fR\> :\fIBold/Reverse_toggle\fR
This command will impact how the 'x' and 'y' toggles are displayed.
Further, it will only be available when at least one of those toggles is \*O.
.TP 7
-\ \ \'\fBx\fR\' :\fIColumn_Highlight_toggle\fR
+\ \ \<\fBx\fR\> :\fIColumn_Highlight_toggle\fR
Changes highlighting for the current sort field.
You probably don't need a constant visual reminder of the sort field and
\*(Me hopes that you always run with 'column highlight' \*F, due to the cost
@@ -765,7 +763,7 @@
visual reminder.
.TP 7
-\ \ \'\fBy\fR\' :\fIRow_Highlight_toggle\fR
+\ \ \<\fBy\fR\> :\fIRow_Highlight_toggle\fR
Changes highlighting for "running" tasks.
For additional insight into this task state, \*(Xt 2a. DESCRIPTIONS of Fields,
Process Status.
@@ -774,7 +772,7 @@
The only costs will be a few additional tty escape sequences.
.TP 7
-\ \ \'\fBz\fR\' :\fIColor/Monochrome_toggle\fR
+\ \ \<\fBz\fR\> :\fIColor/Monochrome_toggle\fR
Switches the \*(CW between your last used color scheme and the older form
of black-on-white or white-on-black.
This command will alter\fB both\fR the \*(SA and \*(TA but does not affect the
@@ -785,20 +783,20 @@
.B CONTENT\fR of \*(TW
.PD 0
.TP 7
-\ \ \'\fBc\fR\' :\fICommand_Line/Program_Name_toggle\fR
+\ \ \<\fBc\fR\> :\fICommand_Line/Program_Name_toggle\fR
This command will be honored whether or not the 'Command' column
is currently visible.
Later, should that field come into view, the change you applied will be seen.
.TP 7
-\ \ \'\fBf\fR\' and \'\fBo\fR\' :\fIFields_select\fR or \fIOrder_fields\fR
+\ \ \<\fBf\fR\> and \<\fBo\fR\> :\fIFields_select\fR or \fIOrder_fields\fR
These keys display separate screens where you can change which
fields are displayed and their order.
For additional information on these \*(CIs
\*(Xt 2b. SELECTING and ORDERING Columns.
.TP 7
-\ \ \'\fBH\fR\' :\fIThreads_toggle\fR
+\ \ \<\fBS\fR\> :\fICumulative_Time_Mode_toggle\fR
When this toggle is \*O, all individual threads will be displayed. Otherwise, \*(Me displays a summation of all threads in a process.
.TP 7
@@ -818,7 +816,7 @@
effect, simply ask for help and view the window summary on the second line.
.TP 7
-\ \ \'\fBu\fR\' :\fIShow_Specific_User_Only\fR
+\ \ \<\fBu\fR\> :\fIShow_Specific_User_Only\fR
You will be prompted to enter the name of the user to display.
Thereafter, in that \*(TW only matching User ID's will be shown, or possibly
no tasks will be shown.
@@ -831,7 +829,7 @@
.B SIZE\fR of \*(TW
.PD 0
.TP 7
-\ \ \'\fBi\fR\' :\fIIdle_Processes_toggle\fR
+\ \ \<\fBi\fR\> :\fIIdle_Processes_toggle\fR
Displays all tasks or just active tasks.
When this toggle is \*F, idled or zombied processes will not be displayed.
@@ -839,7 +837,7 @@
affect the window's size, as all prior \*(TDs will have already been painted.
.TP 7
-\ \ \'\fBn\fR\' or \'#\' :\fISet_Maximum_Tasks\fR
+\ \ \<\fBn\fR\> or \<\fB#\fR\> :\fISet_Maximum_Tasks\fR
You will be prompted to enter the number of tasks to display.
The lessor of your number and available screen rows will be used.
@@ -878,12 +876,12 @@
.in
.TP 7
-\ \ \'\fB<\fR\' :\fIMove_Sort_Field_Left\fR
+\ \ \<\fB<\fR\> :\fIMove_Sort_Field_Left\fR
Moves the sort column to the left unless the current sort field is
the first field being displayed.
.TP 7
-\ \ \'\fB>\fR\' :\fIMove_Sort_Field_Right\fR
+\ \ \<\fB>\fR\> :\fIMove_Sort_Field_Right\fR
Moves the sort column to the right unless the current sort field is
the last field being displayed.
@@ -894,7 +892,7 @@
.in
.TP 7
-\ \ \'\fBF\fR\' or \'\fBO\fR\' :\fISelect_Sort_Field\fR
+\ \ \<\fBF\fR\> or \<\fBO\fR\> :\fISelect_Sort_Field\fR
These keys display a separate screen where you can change which field
is used as the sort column.
@@ -907,7 +905,7 @@
when running \*(Me with column highlighting turned \*F.
.TP 7
-\ \ \'\fBR\fR\' :\fIReverse/Normal_Sort_Field_toggle\fR
+\ \ \<\fBR\fR\> :\fIReverse/Normal_Sort_Field_toggle\fR
Using this \*(CI you can alternate between high-to-low and low-to-high sorts.
.PP
@@ -984,7 +982,7 @@
.\" ......................................................................
.SS 4b. COMMANDS for Windows
.TP 7
-\ \ \'\fB-\fR\' and \'\fB_\fR\' :\fIShow/Hide_Window(s)_toggles\fR
+\ \ \<\fB-\fR\> and \<\fB_\fR\> :\fIShow/Hide_Window(s)_toggles\fR
The '-' key turns the \*(CW's \*(TD \*O and \*F.
When \*O, that \*(TA will show a minimum of the columns header you've
established with the 'f' and 'o' commands.
@@ -998,7 +996,7 @@
as the only display element.
.TP 7
-*\ \'\fB=\fR\' and \'\fB+\fR\' :\fIEqualize_(re-balance)_Window(s)\fR
+*\ \<\fB=\fR\> and \<\fB+\fR\> :\fIEqualize_(re-balance)_Window(s)\fR
The '=' key forces the \*(CW's \*(TD to be visible.
It also reverses any 'i' (idle tasks) and 'n' (max tasks) commands that might
be active.
@@ -1009,7 +1007,7 @@
except for the 'i' (idle tasks) and 'n' (max tasks) commands.
.TP 7
-*\ \'\fBA\fR\' :\fIAlternate_Display_Mode_toggle\fR
+*\ \<\fBA\fR\> :\fIAlternate_Display_Mode_toggle\fR
This command will switch between \*(FM and \*(AM.
The first time you issue this command, all four \*(TDs will be shown.
@@ -1017,7 +1015,7 @@
chosen to make visible.
.TP 7
-*\ \'\fBa\fR\' and \'\fBw\fR\' :\fINext_Window_Forward/Backward\fR
+*\ \<\fBa\fR\> and \<\fBw\fR\> :\fINext_Window_Forward/Backward\fR
This will change the \*(CW, which in turn changes the window to which
commands are directed.
These keys act in a circular fashion so you can reach any desired \*(CW
@@ -1028,7 +1026,7 @@
the \*(TD is \*F and many commands will be restricted.
.TP 7
-*\ \'\fBG\fR\' :\fIChoose_Another_Window/Field_Group\fR
+*\ \<\fBG\fR\> :\fIChoose_Another_Window/Field_Group\fR
You will be prompted to enter a number between 1 and 4 designating the
window/field group which should be made the \*(CW.
@@ -1037,15 +1035,15 @@
commands.
.TP 7
-\ \ \'\fBg\fR\' :\fIChange_Window/Field_Group_Name\fR
+\ \ \<\fBg\fR\> :\fIChange_Window/Field_Group_Name\fR
You will be prompted for a new name to be applied to the \*(CW.
It does not require that the window name be visible
(the 'l' toggle to be \*O).
.IP "*" 3
The \*(CIs shown with an \*(AS have use beyond \*(AM.
- \'=', 'A', 'G' are always available
- \'a', 'w' act the same when color mapping
+ '=', 'A', 'G' are always available
+ 'a', 'w' act the same when color mapping
.\" ----------------------------------------------------------------------

View file

@ -1,50 +0,0 @@
Description: top CPU state descriptions
Author: Craig Small <csmall@debian.org>
Bug-Debian: http://bugs.debian.org/312157
Index: b/top.1
===================================================================
--- a/top.1 2009-11-24 21:00:38.000000000 +1100
+++ b/top.1 2009-11-24 21:00:40.000000000 +1100
@@ -537,6 +537,42 @@
upper case\fR letter and to the\fB right\fR with the\fB lower case\fR
letter.
+.\" ......................................................................
+.SS 2c. CPU States
+.\" ----------------------------------------------------------------------
+The CPU states are shown in the Summary Area. They are always shown as a
+percentage and are for the time between now and the last refresh.
+
+.TP 3
+\fB us\fR \*(EM User CPU time
+The time the CPU has spent running users' processes that are not
+niced.
+
+.TP 3
+\fB sy\fR \*(EM System CPU time
+The time the CPU has spent running the kernel and its processes.
+
+.TP 3
+\fB ni\fR \*(EM Nice CPU time
+The time the CPU has spent running users' proccess that have been
+niced.
+
+.TP 3
+\fB wa\fR \*(EM iowait
+Amount of time the CPU has been waiting for I/O to complete.
+
+.TP 3
+\fB hi\fR \*(EM Hardware IRQ
+The amount of time the CPU has been servicing hardware interrupts.
+
+.TP 3
+\fB si\fR \*(EM Software Interrupts
+The amount of time the CPU has been servicing software interrupts.
+
+.TP 3
+\fB st\fR \*(EM Steal Time
+The amount of CPU 'stolen' from this virtual machine by the hypervisor
+for other tasks (such as running another virtual machine).
.\" ----------------------------------------------------------------------
.SH 3. INTERACTIVE Commands

View file

@ -1,23 +0,0 @@
Description: Explain what SWAP means in top
Bug-Debian: http://bugs.debian.org/217841
Author: Craig Small <csmall@debian.org>
--- a/top.1
+++ b/top.1
@@ -401,13 +401,13 @@
o:\fB VIRT\fR \*(EM Virtual Image (kb)
The total amount of \*(MV used by the task.
It includes all code, data and shared libraries plus pages that have been
-swapped out.
-
-VIRT = SWAP + RES.
+swapped out and pages that have been mapped but not used.
.TP 3
p:\fB SWAP\fR \*(EM Swapped size (kb)
-The swapped out portion of a task's total \*(MV image.
+Memory that is not resident but is present in a task. This is memory that
+has been swapped out but could include additional non-resident memory.
+This column is calculated by subtracting \*(MP from \*(MV.
.TP 3
q:\fB RES\fR \*(EM Resident size (kb)

View file

@ -1,75 +0,0 @@
Author: <hesso@pool.math.tu-berlin.de>
Description: Prevent top from segfaulting when the display is shrinked to only
a few (read: 3 or less) lines.
Index: b/top.c
===================================================================
--- a/top.c 2009-11-24 21:00:35.000000000 +1100
+++ b/top.c 2009-11-24 21:00:39.000000000 +1100
@@ -140,7 +140,7 @@
are exploited in a macro and represent 90% of our optimization.
The Stdout_buf is transparent to our code and regardless of whose
buffer is used, stdout is flushed at frame end or if interactive. */
-static char *Pseudo_scrn;
+static PSEUDO_SCREEN_t Pseudo_scrn;
static int Pseudo_row, Pseudo_cols, Pseudo_size;
#ifndef STDOUT_IOLBF
// less than stdout's normal buffer but with luck mostly '\n' anyway
@@ -2431,7 +2431,10 @@
Pseudo_cols = Screen_cols + CLRBUFSIZ + 1;
if (Batch) Pseudo_size = ROWBUFSIZ + 1;
else Pseudo_size = Pseudo_cols * Screen_rows;
- Pseudo_scrn = alloc_r(Pseudo_scrn, Pseudo_size);
+ if( Pseudo_scrn.buf == NULL || Pseudo_size > Pseudo_scrn.mem_size ) {
+ Pseudo_scrn.buf = alloc_r(Pseudo_scrn.buf, Pseudo_size);
+ Pseudo_scrn.mem_size = Pseudo_size;
+ }
// force rebuild of column headers AND libproc/readproc requirements
Frames_libflags = 0;
@@ -3315,7 +3318,7 @@
// reframewins(), who also builds each window's column headers
if (!Frames_libflags) {
reframewins();
- memset(Pseudo_scrn, '\0', Pseudo_size);
+ memset(Pseudo_scrn.buf, '\0', Pseudo_size);
}
Pseudo_row = Msg_row = scrlins = 0;
ppt = summary_show();
Index: b/top.h
===================================================================
--- a/top.h 2009-11-24 20:53:04.000000000 +1100
+++ b/top.h 2009-11-24 21:00:39.000000000 +1100
@@ -135,7 +135,7 @@
int _len = 1 + snprintf(_str, sizeof(_str), fmt, ## arg); \
putp ( Batch ? _str : \
({ \
- char *restrict const _pse = &Pseudo_scrn[Pseudo_row++ * Pseudo_cols]; \
+ char *restrict const _pse = &Pseudo_scrn.buf[Pseudo_row++ * Pseudo_cols]; \
memcmp(_pse, _str, _len) ? memcpy(_pse, _str, _len) : "\n"; \
}) \
); \
@@ -149,7 +149,11 @@
int _len = 1 + snprintf(_str, sizeof(_str), fmt, ## arg); \
if (Batch) _ptr = _str; \
else { \
- _ptr = &Pseudo_scrn[Pseudo_row++ * Pseudo_cols]; \
+ if (Pseudo_row * Pseudo_cols + _len > Pseudo_size) { \
+ Pseudo_scrn.buf = realloc(Pseudo_scrn.buf, Pseudo_row * Pseudo_cols + _len); \
+ Pseudo_scrn.mem_size = Pseudo_size = Pseudo_row * Pseudo_cols + _len; \
+ } \
+ _ptr = &Pseudo_scrn.buf[Pseudo_row++ * Pseudo_cols]; \
if (memcmp(_ptr, _str, _len)) { \
memcpy(_ptr, _str, _len); \
} else { \
@@ -237,6 +241,11 @@
RCW_t win [4]; // a 'WIN_t.rc' for each of the 4 windows
} RCF_t;
+typedef struct PSEUDO_SCREEN_t {
+ char *buf;
+ int mem_size;
+} PSEUDO_SCREEN_t;
+
// The scaling 'type' used with scale_num() -- this is how
// the passed number is interpreted should scaling be necessary
enum scale_num {

View file

@ -1,19 +0,0 @@
Author: Paolo Pantaleo <paolopantaleo@gmail.com>
Description: Fix highlighting problem in top
Bug-Debian: http://bugs.debian.org/351065
Index: b/top.c
===================================================================
--- a/top.c 2009-11-24 21:00:48.000000000 +1100
+++ b/top.c 2009-11-24 21:00:50.000000000 +1100
@@ -3054,9 +3054,10 @@
snprintf(_z, sizeof(_z), f, ## va); \
snprintf(cbuf, sizeof(cbuf), "%s%s%s", \
q->capclr_rowhigh, \
- _z, \
+ _z+advance, \
!(CHKw(q, Show_HIROWS) && 'R' == p->state) ? q->capclr_rownorm : "" \
); \
+ advance=0; \
pad += q->len_rowhigh; \
if (!(CHKw(q, Show_HIROWS) && 'R' == p->state)) pad += q->len_rownorm; \
} \

View file

@ -1,44 +0,0 @@
Description: Change formal of IRix mode when showing threads
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Bug-Debian: http://bugs.debian.org/459890
Reviewed-by: Craig Small <csmall@debian.org>
Index: b/top.c
===================================================================
--- a/top.c 2009-11-24 20:53:05.000000000 +1100
+++ b/top.c 2009-11-24 21:00:33.000000000 +1100
@@ -1783,7 +1783,8 @@
confighlp(Winstk[i].rc.fieldscur);
}
- if(Rc.mode_irixps && smp_num_cpus>1){
+ if(Rc.mode_irixps && smp_num_cpus>1 &&
+ !(CHKw(Curwin, Show_THREADS))) {
// good for 100 CPUs per process
pcpu_max_value = 9999.0;
Fieldstab[P_CPU].fmts = " %4.0f";
@@ -2570,6 +2571,15 @@
case 'H':
if (VIZCHKc) {
TOGw(Curwin, Show_THREADS);
+ if(Rc.mode_irixps && smp_num_cpus>1 &&
+ !(CHKw(Curwin, Show_THREADS))){
+ // good for 100 CPUs per process
+ pcpu_max_value = 9999.0;
+ Fieldstab[P_CPU].fmts = " %4.0f";
+ } else {
+ pcpu_max_value = 99.9;
+ Fieldstab[P_CPU].fmts = " %#4.1f";
+ }
show_msg(fmtmk("Show threads %s"
, CHKw(Curwin, Show_THREADS) ? "On" : "Off"));
}
@@ -2626,7 +2636,8 @@
Rc.mode_irixps = !Rc.mode_irixps;
show_msg(fmtmk("Irix mode %s", Rc.mode_irixps ? "On" : "Off"));
#endif
- if(Rc.mode_irixps && smp_num_cpus>1){
+ if(Rc.mode_irixps && smp_num_cpus>1 &&
+ !(CHKw(Curwin, Show_THREADS))){
// good for 100 CPUs per process
pcpu_max_value = 9999.0;
Fieldstab[P_CPU].fmts = " %4.0f";

View file

@ -1,16 +0,0 @@
Author: <csmall@debian.org>
Description: Checks minimum time is valid
Index: b/top.c
===================================================================
--- a/top.c 2009-11-24 21:00:39.000000000 +1100
+++ b/top.c 2009-11-24 21:00:48.000000000 +1100
@@ -2552,7 +2552,8 @@
else {
float tmp =
get_float(fmtmk("Change delay from %.1f to", Rc.delay_time));
- if (tmp > -1) Rc.delay_time = tmp;
+ if (tmp == 0.0) show_msg("\aNot valid");
+ else if (tmp > 0) Rc.delay_time = tmp;
}
break;

View file

@ -1,21 +0,0 @@
Description: Exit top if cannot openproc
Author: Justin Pryzby <justinpryzby@users.sourceforge.net>
Bug-Debian: http://bugs.debian.org/378695
Reviewed-by: Craig Small <csmall@debian.org>
Index: b/top.c
===================================================================
--- a/top.c 2009-11-24 21:00:33.000000000 +1100
+++ b/top.c 2009-11-24 21:00:34.000000000 +1100
@@ -1106,6 +1106,12 @@
else
PT = openproc(flags);
+ if (PT==NULL) {
+ std_err(strerror(errno));
+ exit(1);
+ }
+
+
// i) Allocated Chunks: *Existing* table; refresh + reuse
if (!(CHKw(Curwin, Show_THREADS))) {
while (curmax < savmax) {

View file

@ -1,14 +0,0 @@
Author: <fabbione@sunfire.int.fabbione.net>
Description: Handle idle time calculations correctly when running with NOHZ.
Index: b/top.c
===================================================================
--- a/top.c 2009-11-24 21:00:50.000000000 +1100
+++ b/top.c 2009-11-24 21:00:50.000000000 +1100
@@ -2916,6 +2916,7 @@
s_frme = cpu->s - cpu->s_sav;
n_frme = cpu->n - cpu->n_sav;
i_frme = TRIMz(cpu->i - cpu->i_sav);
+ if ((u_frme == 0) && (i_frme == 0)) i_frme = 100.0;
w_frme = cpu->w - cpu->w_sav;
x_frme = cpu->x - cpu->x_sav;
y_frme = cpu->y - cpu->y_sav;

View file

@ -1,98 +0,0 @@
Description: Better top numeric argument handling
Bug-Debian: http://bugs.debian.org/358724
Author: Justin Pryzby <justinpryzby@users.sourceforge.net>
--- a/top.c
+++ b/top.c
@@ -32,6 +32,7 @@
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
+#include <math.h>
#include <string.h>
// Foul POS defines all sorts of stuff...
@@ -1825,8 +1826,12 @@
while (*args) {
const char *cp = *(args++);
+ if (*cp!='-') {
+ std_err(fmtmk("unknown argument '%c'\nusage:\t%s%s" , *cp, Myname, usage));
+ }
- while (*cp) {
+ for(++cp; *cp; cp++) {
+ char *end;
switch (*cp) {
case '\0':
case '-':
@@ -1842,8 +1847,15 @@
else if (*args) cp = *args++;
else std_err("-d requires argument");
/* a negative delay will be dealt with shortly... */
- if (sscanf(cp, "%f", &tmp_delay) != 1)
- std_err(fmtmk("bad delay '%s'", cp));
+ errno=0;
+ if (( (fabs(tmp_delay=strtod(cp, &end))==HUGE_VAL &&
+ errno==ERANGE) ||
+ (tmp_delay==0 && errno!=0) ||
+ end==cp ||
+ end!=cp+strlen(cp))) {
+ std_err(fmtmk("bad delay '%s'", cp));
+ }
+ cp=-1+end;
break;
case 'H':
TOGw(Curwin, Show_THREADS);
@@ -1859,8 +1871,15 @@
if (cp[1]) cp++;
else if (*args) cp = *args++;
else std_err("-n requires argument");
- if (sscanf(cp, "%d", &Loops) != 1 || Loops < 1)
- std_err(fmtmk("bad iterations arg '%s'", cp));
+ errno=0;
+ if ((((Loops=strtol(cp, &end, 0))==LONG_MIN ||
+ Loops==LONG_MAX) &&
+ errno==ERANGE) ||
+ end==cp ||
+ end!=cp+strlen(cp) || Loops<1) {
+ std_err(fmtmk("bad iterations arg '%s'", cp));
+ }
+ cp=-1+end;
break;
case 'p':
do {
@@ -1868,11 +1887,19 @@
selection_type = 'p';
if (cp[1]) cp++;
else if (*args) cp = *args++;
- else std_err("-p argument missing");
+ else std_err("-p requires argument");
if (Monpidsidx >= MONPIDMAX)
std_err(fmtmk("pid limit (%d) exceeded", MONPIDMAX));
- if (sscanf(cp, "%d", &Monpids[Monpidsidx]) != 1 || Monpids[Monpidsidx] < 0)
- std_err(fmtmk("bad pid '%s'", cp));
+ errno=0;
+ if ((((Monpids[Monpidsidx]=strtol(cp, &end, 0))==LONG_MIN ||
+ Monpids[Monpidsidx]==LONG_MAX) &&
+ errno==ERANGE) ||
+ end==cp ||
+ Monpids[Monpidsidx]<1) {
+ std_err(fmtmk("bad pid '%s'", cp));
+ }
+ cp=-1+end;
+
if (!Monpids[Monpidsidx])
Monpids[Monpidsidx] = getpid();
Monpidsidx++;
@@ -1918,10 +1945,7 @@
, *cp, Myname, usage));
} /* end: switch (*cp) */
-
- /* advance cp and jump over any numerical args used above */
- if (*cp) cp += strspn(&cp[1], "- ,.1234567890") + 1;
- } /* end: while (*cp) */
+ } /* end: for (; *cp) */
} /* end: while (*args) */
/* fixup delay time, maybe... */

View file

@ -1,20 +0,0 @@
Description: Check for stdin eof if term
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Bug-Debian: http://bugs.debian.org/458986
Reviewed-by: Craig Small <csmall@debian.org>
Index: b/top.c
===================================================================
--- a/top.c 2009-11-24 21:00:34.000000000 +1100
+++ b/top.c 2009-11-24 21:00:35.000000000 +1100
@@ -3408,9 +3408,8 @@
// check 1st, in case tv zeroed (by sig handler) before it got set
rc = chin(0, &c, 1);
if (rc <= 0) {
- // EOF is pretty much a "can't happen" except for a kernel bug.
- // We should quickly die via SIGHUP, and thus not spin here.
- // if (rc == 0) end_pgm(0); /* EOF from terminal */
+ if (rc == 0) end_pgm(0); /* EOF from terminal, may happen if top
+ * erroneously gets detached from it. */
fcntl(STDIN_FILENO, F_SETFL, file_flags);
select(1, &fs, NULL, NULL, &tv);
fcntl(STDIN_FILENO, F_SETFL, O_NONBLOCK|file_flags);

View file

@ -1,16 +0,0 @@
Description: Make the uid length 5 not 4
Author: <csmall@debian.org>
Bug-Debian: http://bugs.debian.org/426782
Index: b/top.c
===================================================================
--- a/top.c 2009-11-24 21:00:35.000000000 +1100
+++ b/top.c 2009-11-24 21:00:35.000000000 +1100
@@ -1237,7 +1237,7 @@
{ "AaAa", " PID", " %5u", -1, -1, SF(PID), "Process Id", L_NONE },
{ "BbBb", " PPID", " %5u", -1, -1, SF(PPD), "Parent Process Pid", L_EITHER },
{ "CcQq", " RUSER ", " %-8.8s", -1, -1, SF(URR), "Real user name", L_RUSER },
- { "DdCc", " UID", " %4u", -1, -1, SF(UID), "User Id", L_NONE },
+ { "DdCc", " UID", " %5u", -1, -1, SF(UID), "User Id", L_NONE },
{ "EeDd", " USER ", " %-8.8s", -1, -1, SF(URE), "User Name", L_EUSER },
{ "FfNn", " GROUP ", " %-8.8s", -1, -1, SF(GRP), "Group Name", L_GROUP },
{ "GgGg", " TTY ", " %-8.8s", 8, -1, SF(TTY), "Controlling Tty", L_stat },

View file

@ -1,15 +0,0 @@
Description: Fixes off-by-one error so top -u username works
Bug-Debian: http://bugs.debian.org/571790
Author: Chuan-kai Lin <cklin@debian.org>
Last-Update: 2010-03-01
--- a/top.c
+++ b/top.c
@@ -1924,7 +1924,7 @@
errmsg = parse_uid(cp, &selection_uid);
if (errmsg) std_err(errmsg);
selection_type = 'u';
- cp += snprintf(Curwin->colusrnam, USRNAMSIZ-1, "%s", cp); // FIXME: junk
+ cp += snprintf(Curwin->colusrnam, USRNAMSIZ-1, "%s", cp)-1; // FIXME: junk
} while(0);
break;
case 'U':

View file

@ -1,48 +0,0 @@
Description: Cleanup uptime man page #282168
Author: Brendan O'Dea <bod@debian.org>
Bug-Debian: http://bugs.debian.org/282168
Reviewed-by: Craig Small<csmall@debian.org>
Index: b/uptime.1
===================================================================
--- a/uptime.1 2009-11-24 20:53:05.000000000 +1100
+++ b/uptime.1 2009-11-24 21:00:35.000000000 +1100
@@ -6,7 +6,8 @@
.SH SYNOPSIS
.B uptime
.br
-.BR uptime " [" "\-V" ]
+.B uptime
+.RB [ \-V ]
.SH DESCRIPTION
.B uptime
gives a one line display of the following information.
@@ -14,13 +15,25 @@
how long the system has been running,
how many users are currently logged on,
and the system load averages for the past 1, 5, and 15 minutes.
-.sp
+
This is the same information contained in the header line displayed by
.BR w (1).
+.sp
+System load averages is the average number of processes that are either
+in a runnable or uninterruptable state. A process in a runnable state is
+either using the CPU or waiting to use the CPU. A process in
+uninterruptable state is waiting for some I/O access, eg waiting for
+disk. The averages are taken over the three time intervals.
+Load averages are not normalized for the number of CPUs in a system, so
+a load average of 1 means a single CPU system is loaded all the time
+while on a 4 CPU system it means it was idle 75% of the time.
.SH FILES
-.IR /var/run/utmp " information about who is currently logged on"
-.br
-.IR /proc " process information"
+.TP
+.I /var/run/utmp
+information about who is currently logged on
+.TP
+.I /proc
+process information
.SH AUTHORS
.B uptime
was written by Larry Greenfield <greenfie@gauss.rutgers.edu> and

View file

@ -1,109 +0,0 @@
Author: <csmall@debian.org>
Description: Fixes groff problems
Removes pslab as it doesnt appear
Index: b/vmstat.8
===================================================================
--- a/vmstat.8 2009-11-24 20:53:04.000000000 +1100
+++ b/vmstat.8 2009-11-24 21:00:36.000000000 +1100
@@ -1,6 +1,6 @@
.\" This page Copyright (C) 1994 Henry Ware <al172@yfn.ysu.edu>
.\" Distributed under the GPL, Copyleft 1994.
-.TH VMSTAT 8 "27 July 1994 " "Throatwobbler Ginkgo Labs" "Linux Administrator's Manual"
+.TH VMSTAT 8 "2009 Jan 9" "Throatwobbler Ginkgo Labs" "Linux Administrator's Manual"
.SH NAME
vmstat \- Report virtual memory statistics
.SH SYNOPSIS
@@ -22,32 +22,35 @@
.RB [ "\-d"]
.br
.B vmstat
+.RB [ "\-D"]
+.br
+.B vmstat
.RB [ "\-p disk partition"]
.br
.B vmstat
.RB [ "\-V" ]
.SH DESCRIPTION
\fBvmstat\fP reports information about processes, memory, paging,
-block IO, traps, and cpu activity.
+block IO, traps, disks and cpu activity.
The first report produced gives averages since the last reboot. Additional
reports give information on a sampling period of length \fIdelay\fP.
The process and memory reports are instantaneous in either case.
.SS Options
-The \fB-a\fP switch displays active/inactive memory, given a 2.5.41 kernel or better.
+The \fB\-a\fP switch displays active/inactive memory, given a 2.5.41 kernel or better.
.PP
-The \fB-f\fP switch displays the number of forks since boot.
+The \fB\-f\fP switch displays the number of forks since boot.
This includes the fork, vfork, and clone system calls, and is
equivalent to the total number of tasks created. Each process
is represented by one or more tasks, depending on thread usage.
This display does not repeat.
.PP
-The \fB-m\fP displays slabinfo.
+The \fB\-m\fP displays slabinfo.
.PP
-The \fB-n\fP switch causes the header to be displayed only once rather than periodically.
+The \fB\-n\fP switch causes the header to be displayed only once rather than periodically.
.PP
-The \fB-s\fP switch displays a table of various event counters
+The \fB\-s\fP switch displays a table of various event counters
and memory statistics. This display does not repeat.
.PP
.I delay
@@ -58,13 +61,15 @@
is the number of updates. If no count is specified and delay is
defined, \fIcount\fP defaults to infinity.
.PP
-The \fB-d\fP reports disk statistics (2.5.70 or above required)
+The \fB\-d\fP reports disk statistics (2.5.70 or above required)
+.PP
+The \fB-D\fP reports some summary statistics about disk activity.
.PP
-The \fB-p\fP followed by some partition name for detailed statistics (2.5.70 or above required)
+The \fB\-p\fP followed by some partition name for detailed statistics (2.5.70 or above required)
.PP
-The \fB-S\fP followed by k or K or m or M switches outputs between 1000, 1024, 1000000, or 1048576 bytes
+The \fB\-S\fP followed by k or K or m or M switches outputs between 1000, 1024, 1000000, or 1048576 bytes
.PP
-The \fB-V\fP switch results in displaying version information.
+The \fB\-V\fP switch results in displaying version information.
.PP
.SH FIELD DESCRIPTION FOR VM MODE
.SS
@@ -81,8 +86,8 @@
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
-inact: the amount of inactive memory. (-a option)
-active: the amount of active memory. (-a option)
+inact: the amount of inactive memory. (\-a option)
+active: the amount of active memory. (\-a option)
.fi
.PP
.SS
@@ -110,9 +115,9 @@
.B "CPU "
These are percentages of total CPU time.
.nf
-us: Time spent running non-kernel code. (user time, including nice time)
+us: Time spent running non\-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
-id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
+id: Time spent idle. Prior to Linux 2.5.41, this includes IO\-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
@@ -161,8 +166,6 @@
total: Total number of available objects
size: Size of each object
pages: Number of pages with at least one active object
-totpages: Total number of allocated pages
-pslab: Number of pages per slab
.fi
.SH NOTES

View file

@ -1,148 +0,0 @@
Description: Headers for disk and slab info
getopt replacement
Author: Liu Xing <liuxing@cn.fujitsu.com>
Author: Michael Tokarev <mjt@corpit.ru>
Bug-Debian: http://bugs.debian.org/436805
Bug-Debian: http://bugs.debian.org/408088
Index: b/vmstat.c
===================================================================
--- a/vmstat.c 2009-11-24 20:53:00.000000000 +1100
+++ b/vmstat.c 2009-11-24 21:00:49.000000000 +1100
@@ -29,14 +29,15 @@
#include "proc/sysinfo.h"
#include "proc/version.h"
-static unsigned long dataUnit=1024;
-static char szDataUnit [16];
#define UNIT_B 1
#define UNIT_k 1000
#define UNIT_K 1024
#define UNIT_m 1000000
#define UNIT_M 1048576
+static unsigned long dataUnit=UNIT_K;
+static char szDataUnit[3] = "K";
+
#define VMSTAT 0
#define DISKSTAT 0x00000001
#define VMSUMSTAT 0x00000002
@@ -354,6 +355,7 @@
if ((fDiskstat=fopen("/proc/diskstats", "rb"))){
fclose(fDiskstat);
ndisks=getdiskstat(&disks,&partitions);
+ if (!moreheaders) diskheader();
for(k=0; k<ndisks; k++){
if (moreheaders && ((k%height)==0)) diskheader();
printf(format,
@@ -424,6 +426,7 @@
return;
}
+ if (!moreheaders) slabheader();
nSlab = getslabinfo(&slabs);
for(k=0; k<nSlab; k++){
if (moreheaders && ((k%height)==0)) slabheader();
@@ -582,12 +585,10 @@
////////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[]) {
- char partition[16];
- argc=0; /* redefined as number of integer arguments */
- for (argv++;*argv;argv++) {
- if ('-' ==(**argv)) {
- switch (*(++(*argv))) {
-
+ char *partition = NULL;
+ int c;
+
+ while((c = getopt(argc, argv, "VdafmDnp:S:s")) != EOF) switch(c) {
case 'V':
display_version();
exit(0);
@@ -603,7 +604,7 @@
fork_format();
exit(0);
case 'm':
- statMode |= SLABSTAT;
+ statMode |= SLABSTAT;
break;
case 'D':
statMode |= DISKSUMSTAT;
@@ -614,53 +615,40 @@
break;
case 'p':
statMode |= PARTITIONSTAT;
- if (argv[1]){
- char *cp = *++argv;
- if(!memcmp(cp,"/dev/",5)) cp += 5;
- snprintf(partition, sizeof partition, "%s", cp);
- }else{
- fprintf(stderr, "-p requires an argument\n");
- exit(EXIT_FAILURE);
- }
+ partition = optarg;
+ if (memcmp(partition, "/dev/", 5) == 0) partition += 5;
break;
case 'S':
- if (argv[1]){
- ++argv;
- if (!strcmp(*argv, "k")) dataUnit=UNIT_k;
- else if (!strcmp(*argv, "K")) dataUnit=UNIT_K;
- else if (!strcmp(*argv, "m")) dataUnit=UNIT_m;
- else if (!strcmp(*argv, "M")) dataUnit=UNIT_M;
- else {fprintf(stderr, "-S requires k, K, m or M (default is kb)\n");
- exit(EXIT_FAILURE);
- }
- strcpy(szDataUnit, *argv);
- }else {fprintf(stderr, "-S requires an argument\n");
- exit(EXIT_FAILURE);
- }
+ switch(optarg[0]) {
+ case 'b': case 'B': dataUnit = UNIT_B; break;
+ case 'k': dataUnit = UNIT_k; break;
+ case 'K': dataUnit = UNIT_K; break;
+ case 'm': dataUnit = UNIT_m; break;
+ case 'M': dataUnit = UNIT_M; break;
+ default:
+ fprintf(stderr, "-S requires k, K, m or M (default is kb)\n");
+ exit(EXIT_FAILURE);
+ }
+ szDataUnit[0] = optarg[0];
break;
case 's':
- statMode |= VMSUMSTAT;
+ statMode |= VMSUMSTAT;
break;
default:
/* no other aguments defined yet. */
usage();
- }
- }else{
- argc++;
- switch (argc) {
- case 1:
- if ((sleep_time = atoi(*argv)) == 0)
+ }
+
+ if (optind < argc) {
+ if ((sleep_time = atoi(argv[optind++])) == 0)
usage();
- num_updates = ULONG_MAX;
- break;
- case 2:
- num_updates = atol(*argv);
- break;
- default:
- usage();
- } /* switch */
+ num_updates = ULONG_MAX;
}
-}
+ if (optind < argc)
+ num_updates = atol(argv[optind++]);
+ if (optind < argc)
+ usage();
+
if (moreheaders) {
int tmp=winhi()-3;
height=((tmp>0)?tmp:22);

View file

@ -1,77 +0,0 @@
Author: Daniel Novotny
Description: The contents of /proc/diskstats have changed since 2.6.25
Bug-Redhat: https://bugzilla.redhat.com/show_bug.cgi?id=485243
--- a/proc/sysinfo.c
+++ b/proc/sysinfo.c
@@ -796,6 +796,18 @@
}
/////////////////////////////////////////////////////////////////////////////
+static int is_disk(char *dev)
+{
+ char syspath[PATH_MAX];
+ char *slash;
+
+ while ((slash = strchr(dev, '/')))
+ *slash = '!';
+ snprintf(syspath, sizeof(syspath), "/sys/block/%s", dev);
+ return !(access(syspath, F_OK));
+}
+
+/////////////////////////////////////////////////////////////////////////////
unsigned int getdiskstat(struct disk_stat **disks, struct partition_stat **partitions){
FILE* fd;
@@ -803,6 +815,7 @@
int cPartition = 0;
int fields;
unsigned dummy;
+ char devname[PATH_MAX];
*disks = NULL;
*partitions = NULL;
@@ -815,8 +828,9 @@
fclose(fd);
break;
}
- fields = sscanf(buff, " %*d %*d %*s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u", &dummy);
- if (fields == 1){
+ fields = sscanf(buff, " %*d %*d %15s %*u %*u %*u %*u %*u %*u %*u %*u %*u %*u %u",
+ &devname, &dummy);
+ if (fields == 2 && is_disk(devname)){
(*disks) = realloc(*disks, (cDisk+1)*sizeof(struct disk_stat));
sscanf(buff, " %*d %*d %15s %u %u %llu %u %u %u %llu %u %u %u %u",
//&disk_major,
@@ -839,7 +853,9 @@
}else{
(*partitions) = realloc(*partitions, (cPartition+1)*sizeof(struct partition_stat));
fflush(stdout);
- sscanf(buff, " %*d %*d %15s %u %llu %u %u",
+ sscanf(buff, (fields == 2)
+ ? " %*d %*d %15s %u %*u %llu %*u %u %*u %llu %*u %*u %*u %*u"
+ : " %*d %*d %15s %u %llu %u %llu",
//&part_major,
//&part_minor,
(*partitions)[cPartition].partition_name,
--- a/proc/sysinfo.h
+++ b/proc/sysinfo.h
@@ -113,7 +113,7 @@
unsigned parent_disk; // index into a struct disk_stat array
unsigned reads;
unsigned writes;
- unsigned requested_writes;
+ unsigned long long requested_writes;
}partition_stat;
extern unsigned int getpartitions_num(struct disk_stat *disks, int ndisks);
--- a/vmstat.c
+++ b/vmstat.c
@@ -286,7 +286,7 @@
struct disk_stat *disks;
struct partition_stat *partitions, *current_partition=NULL;
unsigned long ndisks, j, k, npartitions;
- const char format[] = "%20u %10llu %10u %10u\n";
+ const char format[] = "%20u %10llu %10u %10llu\n";
fDiskstat=fopen("/proc/diskstats","rb");
if(!fDiskstat){

Some files were not shown because too many files have changed in this diff Show more