procps: link to ncursesw, add a bunch of patches from Debian. Bumprev.
This commit is contained in:
parent
722db61ea2
commit
561a33f5e4
74 changed files with 5897 additions and 86 deletions
62
srcpkgs/procps/patches/10_ps.1.patch
Normal file
62
srcpkgs/procps/patches/10_ps.1.patch
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
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}
|
|
@ -1,39 +0,0 @@
|
||||||
Under certain conditions, top's display can break.
|
|
||||||
This patch is by Curtis Doty, updated by Andreas Kling for 3.2.5.
|
|
||||||
|
|
||||||
To reproduce bug:
|
|
||||||
- run top
|
|
||||||
- turn on color mode ('z')
|
|
||||||
- highlight sort column ('x')
|
|
||||||
- move sort column all the way to the left ('<')
|
|
||||||
- get drunk
|
|
||||||
|
|
||||||
procps e-mail: http://sourceforge.net/mailarchive/forum.php?thread_id=6042978&forum_id=12454
|
|
||||||
Redhat bug: http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=140975
|
|
||||||
Gentoo bug: http://bugs.gentoo.org/show_bug.cgi?id=80296
|
|
||||||
|
|
||||||
--- top.c~ 2005-01-26 06:15:18.000000000 +0100
|
|
||||||
+++ top.c 2005-02-01 09:23:35.000000000 +0100
|
|
||||||
@@ -2952,12 +2952,10 @@
|
|
||||||
for (x = 0; x < q->maxpflgs; x++) {
|
|
||||||
char cbuf[ROWBUFSIZ], _z[ROWBUFSIZ];
|
|
||||||
FLG_t i = q->procflags[x]; // support for our field/column
|
|
||||||
- const char *f = Fieldstab[i].fmts; // macro AND sometimes the fmt
|
|
||||||
+ const char *f = Fieldstab[i].fmts + ((x==0) && !Rc.mode_altscr);
|
|
||||||
unsigned s = Fieldstab[i].scale; // string must be altered !
|
|
||||||
unsigned w = Fieldstab[i].width;
|
|
||||||
|
|
||||||
- int advance = (x==0) && !Rc.mode_altscr;
|
|
||||||
-
|
|
||||||
switch (i) {
|
|
||||||
case P_CMD:
|
|
||||||
{ char tmp[ROWBUFSIZ];
|
|
||||||
@@ -3069,7 +3067,7 @@
|
|
||||||
|
|
||||||
} /* end: switch 'procflag' */
|
|
||||||
|
|
||||||
- rp = scat(rp, cbuf+advance);
|
|
||||||
+ rp = scat(rp, cbuf);
|
|
||||||
} /* end: for 'maxpflgs' */
|
|
||||||
|
|
||||||
PUFF(
|
|
19
srcpkgs/procps/patches/complain_unmounted_proc.patch
Normal file
19
srcpkgs/procps/patches/complain_unmounted_proc.patch
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
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);
|
|
@ -1,5 +1,5 @@
|
||||||
--- proc/module.mk.orig 2010-04-22 13:22:25.736775611 +0200
|
--- a/proc/module.mk.orig 2010-04-22 13:22:25.736775611 +0200
|
||||||
+++ proc/module.mk 2010-04-22 13:24:09.814780650 +0200
|
+++ b/proc/module.mk 2010-04-22 13:24:09.814780650 +0200
|
||||||
@@ -42,7 +42,7 @@ FPIC := -fpic
|
@@ -42,7 +42,7 @@ FPIC := -fpic
|
||||||
|
|
||||||
ifeq ($(SHARED),1)
|
ifeq ($(SHARED),1)
|
||||||
|
@ -27,8 +27,8 @@
|
||||||
|
|
||||||
# Junk anyway... supposed to go in /usr/include/$(NAME)
|
# Junk anyway... supposed to go in /usr/include/$(NAME)
|
||||||
#INSTALL += $(addprefix $(include),$(HDRFILES))
|
#INSTALL += $(addprefix $(include),$(HDRFILES))
|
||||||
--- ps/module.mk.orig 2010-04-22 13:26:49.156775917 +0200
|
--- a/ps/module.mk.orig 2010-04-22 13:26:49.156775917 +0200
|
||||||
+++ ps/module.mk 2010-04-22 13:27:05.019792210 +0200
|
+++ b/ps/module.mk 2010-04-22 13:27:05.019792210 +0200
|
||||||
@@ -33,8 +33,8 @@ ps/stacktrace.o: ps/stacktrace.c
|
@@ -33,8 +33,8 @@ ps/stacktrace.o: ps/stacktrace.c
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,8 +40,8 @@
|
||||||
- $(install) --mode a=r $< $@
|
- $(install) --mode a=r $< $@
|
||||||
+ $(install) -m644 $< $@
|
+ $(install) -m644 $< $@
|
||||||
-rm -f $(DESTDIR)/var/catman/cat1/ps.1.gz $(DESTDIR)/var/man/cat1/ps.1.gz
|
-rm -f $(DESTDIR)/var/catman/cat1/ps.1.gz $(DESTDIR)/var/man/cat1/ps.1.gz
|
||||||
--- Makefile.orig 2009-05-10 20:50:48.000000000 +0200
|
--- a/Makefile.orig 2009-05-10 20:50:48.000000000 +0200
|
||||||
+++ Makefile 2010-10-28 04:09:31.000000000 +0200
|
+++ b/Makefile 2010-10-28 04:09:31.000000000 +0200
|
||||||
@@ -24,10 +24,10 @@ TARVERSION := $(VERSION).$(SUBVERSION)
|
@@ -24,10 +24,10 @@ TARVERSION := $(VERSION).$(SUBVERSION)
|
||||||
############ vars
|
############ vars
|
||||||
|
|
||||||
|
|
108
srcpkgs/procps/patches/free.1.patch
Normal file
108
srcpkgs/procps/patches/free.1.patch
Normal file
|
@ -0,0 +1,108 @@
|
||||||
|
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).
|
||||||
|
+.\"{{{}}}
|
36
srcpkgs/procps/patches/gnu-kbsd-version.patch
Normal file
36
srcpkgs/procps/patches/gnu-kbsd-version.patch
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
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);
|
||||||
|
}
|
147
srcpkgs/procps/patches/kill.1.patch
Normal file
147
srcpkgs/procps/patches/kill.1.patch
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
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
|
25
srcpkgs/procps/patches/kill_warncr.patch
Normal file
25
srcpkgs/procps/patches/kill_warncr.patch
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
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"
|
15
srcpkgs/procps/patches/library_map_freeproc.patch
Normal file
15
srcpkgs/procps/patches/library_map_freeproc.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
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;
|
13
srcpkgs/procps/patches/makefile_dev_null.patch
Normal file
13
srcpkgs/procps/patches/makefile_dev_null.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
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
|
15
srcpkgs/procps/patches/module_mk_shared.patch
Normal file
15
srcpkgs/procps/patches/module_mk_shared.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
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
|
93
srcpkgs/procps/patches/output_sort_time.patch
Normal file
93
srcpkgs/procps/patches/output_sort_time.patch
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
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},
|
76
srcpkgs/procps/patches/path_max.patch
Normal file
76
srcpkgs/procps/patches/path_max.patch
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
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;
|
||||||
|
}
|
208
srcpkgs/procps/patches/pgrep.1.patch
Normal file
208
srcpkgs/procps/patches/pgrep.1.patch
Normal file
|
@ -0,0 +1,208 @@
|
||||||
|
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
|
85
srcpkgs/procps/patches/pgrep_c_option.patch
Normal file
85
srcpkgs/procps/patches/pgrep_c_option.patch
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
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)
|
||||||
|
}
|
16
srcpkgs/procps/patches/pgrep_start_time.patch
Normal file
16
srcpkgs/procps/patches/pgrep_start_time.patch
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
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;
|
||||||
|
|
15
srcpkgs/procps/patches/pgrep_usage_exitcode.patch
Normal file
15
srcpkgs/procps/patches/pgrep_usage_exitcode.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
48
srcpkgs/procps/patches/pmap.1.patch
Normal file
48
srcpkgs/procps/patches/pmap.1.patch
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
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.
|
141
srcpkgs/procps/patches/pmaps_smaps.patch
Normal file
141
srcpkgs/procps/patches/pmaps_smaps.patch
Normal file
|
@ -0,0 +1,141 @@
|
||||||
|
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");
|
37
srcpkgs/procps/patches/proc_version_constructor.patch
Normal file
37
srcpkgs/procps/patches/proc_version_constructor.patch
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
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 */
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
Ripped from Fedora
|
|
||||||
|
|
||||||
If /proc isnt mounted, `top` will cause screen corruption ...
|
|
||||||
|
|
||||||
--- top.c~
|
|
||||||
+++ top.c
|
|
||||||
@@ -3201,12 +3201,15 @@
|
|
||||||
|
|
||||||
int main (int dont_care_argc, char *argv[])
|
|
||||||
{
|
|
||||||
+ struct stat isproc;
|
|
||||||
(void)dont_care_argc;
|
|
||||||
before(*argv);
|
|
||||||
// +-------------+
|
|
||||||
windows_stage1(); // top (sic) slice
|
|
||||||
configs_read(); // > spread etc, <
|
|
||||||
parse_args(&argv[1]); // > lean stuff, <
|
|
||||||
+ if (stat("/proc/self", &isproc)==-1)
|
|
||||||
+ std_err("/proc is not mounted, required for output data");
|
|
||||||
whack_terminal(); // > onions etc. <
|
|
||||||
windows_stage2(); // as bottom slice
|
|
||||||
// +-------------+
|
|
|
@ -1,16 +0,0 @@
|
||||||
X-Gentoo-Bug: 279819
|
|
||||||
Upstream-Patch: http://procps.cvs.sourceforge.net/viewvc/procps/procps/top.c?r1=1.132&r2=1.134
|
|
||||||
--- top.c~ 2008/03/24 04:41:26 1.132
|
|
||||||
+++ top.c 2009/12/10 11:37:48 1.134
|
|
||||||
@@ -2190,7 +2190,10 @@
|
|
||||||
// Value a window's name and make the associated group name.
|
|
||||||
static void win_names (WIN_t *q, const char *name)
|
|
||||||
{
|
|
||||||
- sprintf(q->rc.winname, "%.*s", WINNAMSIZ -1, name);
|
|
||||||
+ // Note that src==dst is illegal in sprintf.
|
|
||||||
+ // Failure: amd64, glibc 2.9-20081201, gcc 4.3.4
|
|
||||||
+ if(q->rc.winname != name)
|
|
||||||
+ sprintf(q->rc.winname, "%.*s", WINNAMSIZ -1, name);
|
|
||||||
sprintf(q->grpname, "%d:%.*s", q->winnum, WINNAMSIZ -1, name);
|
|
||||||
}
|
|
||||||
|
|
30
srcpkgs/procps/patches/ps_1_flt_output.patch
Normal file
30
srcpkgs/procps/patches/ps_1_flt_output.patch
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
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).
|
548
srcpkgs/procps/patches/ps_1_options.patch
Normal file
548
srcpkgs/procps/patches/ps_1_options.patch
Normal file
|
@ -0,0 +1,548 @@
|
||||||
|
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.
|
157
srcpkgs/procps/patches/ps_cgroup_display.patch
Normal file
157
srcpkgs/procps/patches/ps_cgroup_display.patch
Normal file
|
@ -0,0 +1,157 @@
|
||||||
|
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},
|
29
srcpkgs/procps/patches/ps_size_sz.patch
Normal file
29
srcpkgs/procps/patches/ps_size_sz.patch
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
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.
|
446
srcpkgs/procps/patches/ps_supgid_display.patch
Normal file
446
srcpkgs/procps/patches/ps_supgid_display.patch
Normal file
|
@ -0,0 +1,446 @@
|
||||||
|
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,
|
25
srcpkgs/procps/patches/readproc_c.patch
Normal file
25
srcpkgs/procps/patches/readproc_c.patch
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
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 */
|
21
srcpkgs/procps/patches/readproc_double_free.patch
Normal file
21
srcpkgs/procps/patches/readproc_double_free.patch
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
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!)
|
69
srcpkgs/procps/patches/series
Normal file
69
srcpkgs/procps/patches/series
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
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
|
116
srcpkgs/procps/patches/skill.1.patch
Normal file
116
srcpkgs/procps/patches/skill.1.patch
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
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.
|
18
srcpkgs/procps/patches/skill_multiarg.patch
Normal file
18
srcpkgs/procps/patches/skill_multiarg.patch
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
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;
|
14
srcpkgs/procps/patches/skill_null_argv.patch
Normal file
14
srcpkgs/procps/patches/skill_null_argv.patch
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
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
|
16
srcpkgs/procps/patches/skill_perror.patch
Normal file
16
srcpkgs/procps/patches/skill_perror.patch
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
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;
|
||||||
|
}
|
97
srcpkgs/procps/patches/slabtop_1.patch
Normal file
97
srcpkgs/procps/patches/slabtop_1.patch
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
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>.
|
116
srcpkgs/procps/patches/slabtop_once.patch
Normal file
116
srcpkgs/procps/patches/slabtop_once.patch
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
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;
|
||||||
|
}
|
147
srcpkgs/procps/patches/sysctl.8.patch
Normal file
147
srcpkgs/procps/patches/sysctl.8.patch
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
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>
|
||||||
|
|
46
srcpkgs/procps/patches/sysctl_options.patch
Normal file
46
srcpkgs/procps/patches/sysctl_options.patch
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
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;
|
||||||
|
}
|
36
srcpkgs/procps/patches/sysinfo_7_numbers.patch
Normal file
36
srcpkgs/procps/patches/sysinfo_7_numbers.patch
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
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 */
|
23
srcpkgs/procps/patches/sysinfo_elfnote.patch
Normal file
23
srcpkgs/procps/patches/sysinfo_elfnote.patch
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
20
srcpkgs/procps/patches/sysinfo_kfreebsd_hertz.patch
Normal file
20
srcpkgs/procps/patches/sysinfo_kfreebsd_hertz.patch
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
15
srcpkgs/procps/patches/tload.1.patch
Normal file
15
srcpkgs/procps/patches/tload.1.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
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.
|
||||||
|
|
16
srcpkgs/procps/patches/tload_no_optargs.patch
Normal file
16
srcpkgs/procps/patches/tload_no_optargs.patch
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
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;
|
416
srcpkgs/procps/patches/top.1.patch
Normal file
416
srcpkgs/procps/patches/top.1.patch
Normal file
|
@ -0,0 +1,416 @@
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
|
.\" ----------------------------------------------------------------------
|
50
srcpkgs/procps/patches/top.1_cpustates.patch
Normal file
50
srcpkgs/procps/patches/top.1_cpustates.patch
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
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
|
23
srcpkgs/procps/patches/top_1_swap.patch
Normal file
23
srcpkgs/procps/patches/top_1_swap.patch
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
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)
|
75
srcpkgs/procps/patches/top_c_resize.patch
Normal file
75
srcpkgs/procps/patches/top_c_resize.patch
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
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 {
|
19
srcpkgs/procps/patches/top_highlight.patch
Normal file
19
srcpkgs/procps/patches/top_highlight.patch
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
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; \
|
||||||
|
} \
|
44
srcpkgs/procps/patches/top_irix.patch
Normal file
44
srcpkgs/procps/patches/top_irix.patch
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
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";
|
16
srcpkgs/procps/patches/top_mintime.patch
Normal file
16
srcpkgs/procps/patches/top_mintime.patch
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
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;
|
||||||
|
|
21
srcpkgs/procps/patches/top_no_openproc.patch
Normal file
21
srcpkgs/procps/patches/top_no_openproc.patch
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
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) {
|
14
srcpkgs/procps/patches/top_nohz.patch
Normal file
14
srcpkgs/procps/patches/top_nohz.patch
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
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;
|
98
srcpkgs/procps/patches/top_numeric_args.patch
Normal file
98
srcpkgs/procps/patches/top_numeric_args.patch
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
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... */
|
20
srcpkgs/procps/patches/top_stdin_eof.patch
Normal file
20
srcpkgs/procps/patches/top_stdin_eof.patch
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
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);
|
16
srcpkgs/procps/patches/top_uid_length.patch
Normal file
16
srcpkgs/procps/patches/top_uid_length.patch
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
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 },
|
15
srcpkgs/procps/patches/top_username_parse.patch
Normal file
15
srcpkgs/procps/patches/top_username_parse.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
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':
|
48
srcpkgs/procps/patches/uptime.1.patch
Normal file
48
srcpkgs/procps/patches/uptime.1.patch
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
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
|
109
srcpkgs/procps/patches/vmstat.8.patch
Normal file
109
srcpkgs/procps/patches/vmstat.8.patch
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
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
|
148
srcpkgs/procps/patches/vmstat_headers.patch
Normal file
148
srcpkgs/procps/patches/vmstat_headers.patch
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
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);
|
77
srcpkgs/procps/patches/vmstat_part_format.patch
Normal file
77
srcpkgs/procps/patches/vmstat_part_format.patch
Normal file
|
@ -0,0 +1,77 @@
|
||||||
|
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){
|
52
srcpkgs/procps/patches/vmstat_units.patch
Normal file
52
srcpkgs/procps/patches/vmstat_units.patch
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
Author: Michael Tokarev <mjt@tls.msk.ru>
|
||||||
|
Description: For vmstat only change units where it makes sense and try
|
||||||
|
to stop some overflows of some kernel variables
|
||||||
|
Bug-Debian: http://bugs.debian.org/558134
|
||||||
|
Bug-Debian: http://bugs.debian.org/558361
|
||||||
|
--- a/proc/sysinfo.c
|
||||||
|
+++ b/proc/sysinfo.c
|
||||||
|
@@ -606,7 +606,7 @@
|
||||||
|
);
|
||||||
|
head = tail+1;
|
||||||
|
if(!found) goto nextline;
|
||||||
|
- *(found->slot) = strtoul(head,&tail,10);
|
||||||
|
+ *(found->slot) = (unsigned long)strtoull(head,&tail,10);
|
||||||
|
nextline:
|
||||||
|
tail = strchr(head, '\n');
|
||||||
|
if(!tail) break;
|
||||||
|
--- a/vmstat.c
|
||||||
|
+++ b/vmstat.c
|
||||||
|
@@ -209,8 +209,8 @@
|
||||||
|
unitConvert(kb_swap_used), unitConvert(kb_main_free),
|
||||||
|
unitConvert(a_option?kb_inactive:kb_main_buffers),
|
||||||
|
unitConvert(a_option?kb_active:kb_main_cached),
|
||||||
|
- (unsigned)( (*pswpin * unitConvert(kb_per_page) * hz + divo2) / Div ),
|
||||||
|
- (unsigned)( (*pswpout * unitConvert(kb_per_page) * hz + divo2) / Div ),
|
||||||
|
+ (unsigned)( (*pswpin * kb_per_page * hz + divo2) / Div ),
|
||||||
|
+ (unsigned)( (*pswpout * kb_per_page * hz + divo2) / Div ),
|
||||||
|
(unsigned)( (*pgpgin * hz + divo2) / Div ),
|
||||||
|
(unsigned)( (*pgpgout * hz + divo2) / Div ),
|
||||||
|
(unsigned)( (*intr * hz + divo2) / Div ),
|
||||||
|
@@ -258,8 +258,8 @@
|
||||||
|
unitConvert(kb_swap_used),unitConvert(kb_main_free),
|
||||||
|
unitConvert(a_option?kb_inactive:kb_main_buffers),
|
||||||
|
unitConvert(a_option?kb_active:kb_main_cached),
|
||||||
|
- (unsigned)( ( (pswpin [tog] - pswpin [!tog])*unitConvert(kb_per_page)+sleep_half )/sleep_time ), /*si*/
|
||||||
|
- (unsigned)( ( (pswpout[tog] - pswpout[!tog])*unitConvert(kb_per_page)+sleep_half )/sleep_time ), /*so*/
|
||||||
|
+ (unsigned)( ( (pswpin [tog] - pswpin [!tog])*kb_per_page+sleep_half )/sleep_time ), /*si*/
|
||||||
|
+ (unsigned)( ( (pswpout[tog] - pswpout[!tog])*kb_per_page+sleep_half )/sleep_time ), /*so*/
|
||||||
|
(unsigned)( ( pgpgin [tog] - pgpgin [!tog] +sleep_half )/sleep_time ), /*bi*/
|
||||||
|
(unsigned)( ( pgpgout[tog] - pgpgout[!tog] +sleep_half )/sleep_time ), /*bo*/
|
||||||
|
(unsigned)( ( intr [tog] - intr [!tog] +sleep_half )/sleep_time ), /*in*/
|
||||||
|
--- a/vmstat.8
|
||||||
|
+++ b/vmstat.8
|
||||||
|
@@ -67,7 +67,8 @@
|
||||||
|
.PP
|
||||||
|
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 changes the units of
|
||||||
|
+ouput from bytes to outputs between 1000, 1024, 1000000, or 1048576 bytes. Note this does not change the swap (si/so) or block (bi/bo) fields.
|
||||||
|
.PP
|
||||||
|
The \fB\-V\fP switch results in displaying version information.
|
||||||
|
.PP
|
88
srcpkgs/procps/patches/w-bassman.patch
Normal file
88
srcpkgs/procps/patches/w-bassman.patch
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
Author: <csmall@debian.org>
|
||||||
|
Description: w-bassman emulation with -o flag
|
||||||
|
Bug-Debian: http://bugs.debian.org/414906
|
||||||
|
Index: b/w.1
|
||||||
|
===================================================================
|
||||||
|
--- a/w.1 2009-11-24 20:53:04.000000000 +1100
|
||||||
|
+++ b/w.1 2009-11-24 21:00:39.000000000 +1100
|
||||||
|
@@ -5,7 +5,7 @@
|
||||||
|
w \- Show who is logged on and what they are doing.
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B w \-
|
||||||
|
-.RB [ husfV ]
|
||||||
|
+.RB [ husfVo ]
|
||||||
|
.RI [ user ]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B "w "
|
||||||
|
@@ -55,6 +55,9 @@
|
||||||
|
.B "\-V "
|
||||||
|
Display version information.
|
||||||
|
.TP 0.5i
|
||||||
|
+.B "\-o "
|
||||||
|
+Old style output. Prints blank space for idle times less than one minute.
|
||||||
|
+.TP 0.5i
|
||||||
|
.B "user "
|
||||||
|
Show information about the specified user only.
|
||||||
|
|
||||||
|
Index: b/w.c
|
||||||
|
===================================================================
|
||||||
|
--- a/w.c 2009-11-24 21:00:37.000000000 +1100
|
||||||
|
+++ b/w.c 2009-11-24 21:00:39.000000000 +1100
|
||||||
|
@@ -30,6 +30,7 @@
|
||||||
|
#include <termios.h>
|
||||||
|
|
||||||
|
static int ignoreuser = 0; /* for '-u' */
|
||||||
|
+static int oldstyle = 0; /* for '-o' */
|
||||||
|
static proc_t **procs; /* our snapshot of the process table */
|
||||||
|
|
||||||
|
typedef struct utmp utmp_t;
|
||||||
|
@@ -76,6 +77,16 @@
|
||||||
|
printf(" ? ");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
+ if (oldstyle) {
|
||||||
|
+ if (t >= 48*60*60) /* > 2 days */
|
||||||
|
+ fprintf(fout, " %2ludays", t/(24*60*60));
|
||||||
|
+ else if (t >= 60*60) /* > 1 hour */
|
||||||
|
+ fprintf(fout, " %2lu:%02u ", t/(60*60), (unsigned) ((t/60)%60));
|
||||||
|
+ else if (t > 60) /* > 1 minute */
|
||||||
|
+ fprintf(fout, " %2lu:%02um", t/60, (unsigned) t%60);
|
||||||
|
+ else
|
||||||
|
+ fprintf(fout, " ");
|
||||||
|
+ } else {
|
||||||
|
if (t >= 48*60*60) /* > 2 days */
|
||||||
|
fprintf(fout, " %2ludays", t/(24*60*60));
|
||||||
|
else if (t >= 60*60) /* > 1 hour */
|
||||||
|
@@ -84,6 +95,7 @@
|
||||||
|
fprintf(fout, " %2lu:%02u ", t/60, (unsigned) t%60);
|
||||||
|
else
|
||||||
|
fprintf(fout, " %2lu.%02us", t, centi_sec);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/**** stat the device file to get an idle time */
|
||||||
|
@@ -239,7 +251,7 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
- for (args=0; (ch = getopt(argc, argv, "hlusfV")) != EOF; args++)
|
||||||
|
+ for (args=0; (ch = getopt(argc, argv, "hlusfVo")) != EOF; args++)
|
||||||
|
switch (ch) {
|
||||||
|
case 'h': header = 0; break;
|
||||||
|
case 'l': longform = 1; break;
|
||||||
|
@@ -247,6 +259,7 @@
|
||||||
|
case 'f': from = !from; break;
|
||||||
|
case 'V': display_version(); exit(0);
|
||||||
|
case 'u': ignoreuser = 1; break;
|
||||||
|
+ case 'o': oldstyle = 1; break;
|
||||||
|
default:
|
||||||
|
printf("usage: w -hlsufV [user]\n"
|
||||||
|
" -h skip header\n"
|
||||||
|
@@ -254,6 +267,7 @@
|
||||||
|
" -s short listing\n"
|
||||||
|
" -u ignore uid of processes\n"
|
||||||
|
" -f toggle FROM field (default %s)\n"
|
||||||
|
+ " -o old-style output\n"
|
||||||
|
" -V display version\n", FROM_STRING);
|
||||||
|
exit(1);
|
||||||
|
}
|
70
srcpkgs/procps/patches/w.1.patch
Normal file
70
srcpkgs/procps/patches/w.1.patch
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
Author: <csmall@debian.org>
|
||||||
|
Description: Cleaned up the w man page
|
||||||
|
Make note of the time formats
|
||||||
|
Bug-Debian: http://bugs.debian.org/414906
|
||||||
|
Index: b/w.1
|
||||||
|
===================================================================
|
||||||
|
--- a/w.1 2009-11-24 21:00:39.000000000 +1100
|
||||||
|
+++ b/w.1 2009-11-24 21:00:42.000000000 +1100
|
||||||
|
@@ -4,26 +4,26 @@
|
||||||
|
.SH NAME
|
||||||
|
w \- Show who is logged on and what they are doing.
|
||||||
|
.SH SYNOPSIS
|
||||||
|
-.B w \-
|
||||||
|
-.RB [ husfVo ]
|
||||||
|
+.B w
|
||||||
|
+.RB [ \-husfVo ]
|
||||||
|
.RI [ user ]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
-.B "w "
|
||||||
|
+.B w
|
||||||
|
displays information about the users currently on the machine,
|
||||||
|
and their processes.
|
||||||
|
The header shows, in this order, the current time,
|
||||||
|
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
|
||||||
|
+
|
||||||
|
The following entries are displayed for each user:
|
||||||
|
login name, the tty name, the remote host, login time, idle time, JCPU, PCPU,
|
||||||
|
and the command line of their current process.
|
||||||
|
-.sp
|
||||||
|
+
|
||||||
|
The JCPU time is the time used by all processes attached to the tty. It
|
||||||
|
does not include past background jobs, but does include currently
|
||||||
|
running background jobs.
|
||||||
|
-.sp
|
||||||
|
+
|
||||||
|
The PCPU time is the time used by the current process, named in the "what"
|
||||||
|
field.
|
||||||
|
|
||||||
|
@@ -35,7 +35,7 @@
|
||||||
|
.TP 0.5i
|
||||||
|
.B "\-u "
|
||||||
|
Ignores the username while figuring out the current process and cpu
|
||||||
|
-times. To demonstrate this, do a "su" and do a "w" and a "w -u".
|
||||||
|
+times. To demonstrate this, do a "su" and do a "w" and a "w \-u".
|
||||||
|
.TP 0.5i
|
||||||
|
.B "\-s "
|
||||||
|
Use the short format.
|
||||||
|
@@ -70,6 +70,19 @@
|
||||||
|
process information
|
||||||
|
.PP
|
||||||
|
|
||||||
|
+.SH NOTES
|
||||||
|
+The output for Idle, JCPU and PCPU times vaires depending on if you use
|
||||||
|
+the \-o (old style) option or not. These formats can be confusing if you
|
||||||
|
+switch between the old style and standard. In the following paragraphs
|
||||||
|
+days are DD, hours HH, minutes MM, seconds SS and 100ths of seconds CC.
|
||||||
|
+
|
||||||
|
+The standard format is DDdays, HH:MMm, MM:SS or SS.CC if the times are
|
||||||
|
+greater than 2 days, 1hour, or 1 minute respectively.
|
||||||
|
+
|
||||||
|
+For the \-o option, the output will be either DDdays, HH:MM, MM:SSm or
|
||||||
|
+blank if the times are greater than 2 days, 1 hour or 1 minute
|
||||||
|
+respectively.
|
||||||
|
+
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.BR free (1),
|
||||||
|
.BR ps (1),
|
30
srcpkgs/procps/patches/w_columns.patch
Normal file
30
srcpkgs/procps/patches/w_columns.patch
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
Description: use COLUMNS environment if TIOCGWINSZ fails
|
||||||
|
Author: Craig Small <csmall@debian.org>
|
||||||
|
Index: b/w.c
|
||||||
|
===================================================================
|
||||||
|
--- a/w.c 2009-11-24 21:00:39.000000000 +1100
|
||||||
|
+++ b/w.c 2009-11-24 21:00:43.000000000 +1100
|
||||||
|
@@ -241,10 +241,10 @@
|
||||||
|
|
||||||
|
/***** main */
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
- char *user = NULL;
|
||||||
|
+ char *user = NULL, *p;
|
||||||
|
utmp_t *u;
|
||||||
|
struct winsize win;
|
||||||
|
- int header=1, longform=1, from=1, args, maxcmd=80, ch;
|
||||||
|
+ int header=1, longform=1, from=1, args, maxcmd, ch;
|
||||||
|
|
||||||
|
#ifndef W_SHOWFROM
|
||||||
|
from = 0;
|
||||||
|
@@ -277,6 +277,10 @@
|
||||||
|
|
||||||
|
if (ioctl(1, TIOCGWINSZ, &win) != -1 && win.ws_col > 0)
|
||||||
|
maxcmd = win.ws_col;
|
||||||
|
+ else if (p = getenv("COLUMNS"))
|
||||||
|
+ maxcmd = atoi(p);
|
||||||
|
+ else
|
||||||
|
+ maxcmd = 80;
|
||||||
|
if (maxcmd < 71) {
|
||||||
|
fprintf(stderr, "%d column window is too narrow\n", maxcmd);
|
||||||
|
exit(1);
|
173
srcpkgs/procps/patches/w_envlength.patch
Normal file
173
srcpkgs/procps/patches/w_envlength.patch
Normal file
|
@ -0,0 +1,173 @@
|
||||||
|
Description: Use environment to set user and from/host column widths
|
||||||
|
Author: Craig Small <csmall@debian.org>
|
||||||
|
Bug-Debian: http://bugs.debian.org/396423
|
||||||
|
Bug-Debian: http://bugs.debian.org/341439
|
||||||
|
Index: b/w.1
|
||||||
|
===================================================================
|
||||||
|
--- a/w.1 2009-11-24 21:00:42.000000000 +1100
|
||||||
|
+++ b/w.1 2009-11-24 21:00:44.000000000 +1100
|
||||||
|
@@ -1,6 +1,6 @@
|
||||||
|
.\" -*-Nroff-*-
|
||||||
|
.\"
|
||||||
|
-.TH W 1 "8 Dec 1993 " " " "Linux User's Manual"
|
||||||
|
+.TH W 1 "5 October 2009 " " " "Linux User's Manual"
|
||||||
|
.SH NAME
|
||||||
|
w \- Show who is logged on and what they are doing.
|
||||||
|
.SH SYNOPSIS
|
||||||
|
@@ -61,6 +61,14 @@
|
||||||
|
.B "user "
|
||||||
|
Show information about the specified user only.
|
||||||
|
|
||||||
|
+.SH ENVIRONMENT
|
||||||
|
+.TP
|
||||||
|
+PROCPS_USERLEN
|
||||||
|
+Override the default width of the username column. Defaults to 8.
|
||||||
|
+.TP
|
||||||
|
+PROCPS_FROMLEN
|
||||||
|
+Override the default width of the from column. Defaults to 16.
|
||||||
|
+
|
||||||
|
.SH FILES
|
||||||
|
.TP
|
||||||
|
.I /var/run/utmp
|
||||||
|
Index: b/w.c
|
||||||
|
===================================================================
|
||||||
|
--- a/w.c 2009-11-24 21:00:43.000000000 +1100
|
||||||
|
+++ b/w.c 2009-11-24 21:00:44.000000000 +1100
|
||||||
|
@@ -44,20 +44,19 @@
|
||||||
|
/* Uh... same thing as UT_NAMESIZE */
|
||||||
|
#define USERSZ (sizeof u->ut_user)
|
||||||
|
|
||||||
|
+/* Arbitary setting, not too big for the screen, max host size */
|
||||||
|
+#define HOSTSZ 40
|
||||||
|
+
|
||||||
|
|
||||||
|
/* This routine is careful since some programs leave utmp strings
|
||||||
|
- * unprintable. Always outputs at least 16 chars padded with spaces
|
||||||
|
+ * unprintable. Always outputs at least fromlen chars padded with spaces
|
||||||
|
* on the right if necessary.
|
||||||
|
*/
|
||||||
|
-static void print_host(const char *restrict host, int len) {
|
||||||
|
+static void print_host(const char *restrict host, int len, const int fromlen) {
|
||||||
|
const char *last;
|
||||||
|
int width = 0;
|
||||||
|
|
||||||
|
- /* FIXME: there should really be a way to configure this... */
|
||||||
|
- /* for now, we'll just limit it to the 16 that the libc5 version
|
||||||
|
- * of utmp uses.
|
||||||
|
- */
|
||||||
|
- if (len > 16) len = 16;
|
||||||
|
+ if (len > fromlen) len = fromlen;
|
||||||
|
last = host + len;
|
||||||
|
for ( ; host < last ; host++){
|
||||||
|
if (isprint(*host) && *host != ' ') {
|
||||||
|
@@ -68,7 +67,8 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// space-fill, and a '-' too if needed to ensure the column exists
|
||||||
|
- if(width < 16) fputs("- "+width, stdout);
|
||||||
|
+ while(width++ < fromlen)
|
||||||
|
+ fputc(' ',stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***** compact 7 char format for time intervals (belongs in libproc?) */
|
||||||
|
@@ -180,7 +180,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
/***** showinfo */
|
||||||
|
-static void showinfo(utmp_t *u, int formtype, int maxcmd, int from) {
|
||||||
|
+static void showinfo(utmp_t *u, int formtype, int maxcmd, int from, const int userlen, const int fromlen) {
|
||||||
|
unsigned long long jcpu;
|
||||||
|
int ut_pid_found;
|
||||||
|
unsigned i;
|
||||||
|
@@ -205,9 +205,9 @@
|
||||||
|
|
||||||
|
strncpy(uname, u->ut_user, USERSZ); /* force NUL term for printf */
|
||||||
|
if (formtype) {
|
||||||
|
- printf("%-9.8s%-9.8s", uname, u->ut_line);
|
||||||
|
+ printf("%-*.*s%-9.8s", userlen+1, userlen, uname, u->ut_line);
|
||||||
|
if (from)
|
||||||
|
- print_host(u->ut_host, sizeof u->ut_host);
|
||||||
|
+ print_host(u->ut_host, sizeof u->ut_host, fromlen);
|
||||||
|
print_logintime(u->ut_time, stdout);
|
||||||
|
if (*u->ut_line == ':') /* idle unknown for xdm logins */
|
||||||
|
printf(" ?xdm? ");
|
||||||
|
@@ -220,9 +220,9 @@
|
||||||
|
} else
|
||||||
|
printf(" ? ");
|
||||||
|
} else {
|
||||||
|
- printf("%-9.8s%-9.8s", u->ut_user, u->ut_line);
|
||||||
|
+ printf("%-*.*s%-9.8s", userlen+1, userlen, u->ut_user, u->ut_line);
|
||||||
|
if (from)
|
||||||
|
- print_host(u->ut_host, sizeof u->ut_host);
|
||||||
|
+ print_host(u->ut_host, sizeof u->ut_host, fromlen);
|
||||||
|
if (*u->ut_line == ':') /* idle unknown for xdm logins */
|
||||||
|
printf(" ?xdm? ");
|
||||||
|
else
|
||||||
|
@@ -245,6 +245,9 @@
|
||||||
|
utmp_t *u;
|
||||||
|
struct winsize win;
|
||||||
|
int header=1, longform=1, from=1, args, maxcmd, ch;
|
||||||
|
+ int userlen = 8;
|
||||||
|
+ int fromlen = 16;
|
||||||
|
+ char *env_var;
|
||||||
|
|
||||||
|
#ifndef W_SHOWFROM
|
||||||
|
from = 0;
|
||||||
|
@@ -275,6 +278,22 @@
|
||||||
|
if ((argv[optind]))
|
||||||
|
user = (argv[optind]);
|
||||||
|
|
||||||
|
+ /* Get user field length from environment */
|
||||||
|
+ if ( (env_var = getenv("PROCPS_USERLEN")) != NULL) {
|
||||||
|
+ userlen = atoi(env_var);
|
||||||
|
+ if (userlen < 8 || userlen > USERSZ) {
|
||||||
|
+ fprintf(stderr, "User length environment PROCPS_USERLEN must be between 8 and %d, ignoring.\n", USERSZ);
|
||||||
|
+ userlen=8;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ /* Get from field length from environment */
|
||||||
|
+ if ( (env_var = getenv("PROCPS_FROMLEN")) != NULL) {
|
||||||
|
+ fromlen = atoi(env_var);
|
||||||
|
+ if (fromlen < 8 || fromlen > HOSTSZ) {
|
||||||
|
+ fprintf(stderr, "From length environment PROCPS_FROMLEN must be between 8 and %d, ignoring.\n", HOSTSZ);
|
||||||
|
+ fromlen=16;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
if (ioctl(1, TIOCGWINSZ, &win) != -1 && win.ws_col > 0)
|
||||||
|
maxcmd = win.ws_col;
|
||||||
|
else if (p = getenv("COLUMNS"))
|
||||||
|
@@ -285,7 +304,7 @@
|
||||||
|
fprintf(stderr, "%d column window is too narrow\n", maxcmd);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
- maxcmd -= 29 + (from ? 16 : 0) + (longform ? 20 : 0);
|
||||||
|
+ maxcmd -= 21 + userlen + (from ? fromlen : 0) + (longform ? 20 : 0);
|
||||||
|
if (maxcmd < 3)
|
||||||
|
fprintf(stderr, "warning: screen width %d suboptimal.\n", win.ws_col);
|
||||||
|
|
||||||
|
@@ -293,7 +312,7 @@
|
||||||
|
|
||||||
|
if (header) { /* print uptime and headers */
|
||||||
|
print_uptime();
|
||||||
|
- printf("USER TTY ");
|
||||||
|
+ printf("%-*s TTY ",userlen,"USER");
|
||||||
|
if (from)
|
||||||
|
printf("FROM ");
|
||||||
|
if (longform)
|
||||||
|
@@ -309,14 +328,14 @@
|
||||||
|
u = getutent();
|
||||||
|
if (unlikely(!u)) break;
|
||||||
|
if (u->ut_type != USER_PROCESS) continue;
|
||||||
|
- if (!strncmp(u->ut_user, user, USERSZ)) showinfo(u, longform, maxcmd, from);
|
||||||
|
+ if (!strncmp(u->ut_user, user, USERSZ)) showinfo(u, longform, maxcmd, from, userlen, fromlen);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (;;) {
|
||||||
|
u = getutent();
|
||||||
|
if (unlikely(!u)) break;
|
||||||
|
if (u->ut_type != USER_PROCESS) continue;
|
||||||
|
- if (*u->ut_user) showinfo(u, longform, maxcmd, from);
|
||||||
|
+ if (*u->ut_user) showinfo(u, longform, maxcmd, from, userlen, fromlen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
endutent();
|
16
srcpkgs/procps/patches/w_time.patch
Normal file
16
srcpkgs/procps/patches/w_time.patch
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
Description: Let fprintf print locale-friendly seconds
|
||||||
|
Author: Craig Small <csmall@debian.org>
|
||||||
|
Bug-Debian: http://bugs.debian.org/252575
|
||||||
|
Index: b/w.c
|
||||||
|
===================================================================
|
||||||
|
--- a/w.c 2009-11-24 20:53:04.000000000 +1100
|
||||||
|
+++ b/w.c 2009-11-24 21:00:37.000000000 +1100
|
||||||
|
@@ -83,7 +83,7 @@
|
||||||
|
else if (t > 60) /* > 1 minute */
|
||||||
|
fprintf(fout, " %2lu:%02u ", t/60, (unsigned) t%60);
|
||||||
|
else
|
||||||
|
- fprintf(fout, " %2lu.%02us", t, centi_sec);
|
||||||
|
+ fprintf(fout, " %2lu.%02us", t, centi_sec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**** stat the device file to get an idle time */
|
15
srcpkgs/procps/patches/w_userproc.patch
Normal file
15
srcpkgs/procps/patches/w_userproc.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
Description: Make w make better guesses for user process
|
||||||
|
Based on suggestion by Herbert Xu <herbert@gondor.apana.org.au>
|
||||||
|
Bug-Debian: http://bugs.debian.org/187808
|
||||||
|
Author: Craig Small <csmall@debian.org>
|
||||||
|
--- a/w.c
|
||||||
|
+++ b/w.c
|
||||||
|
@@ -171,7 +171,7 @@
|
||||||
|
secondbest = tmp;
|
||||||
|
}
|
||||||
|
if(!ignoreuser && uid != tmp->euid && uid != tmp->ruid) continue;
|
||||||
|
- if(tmp->tgid != tmp->tpgid) continue;
|
||||||
|
+ if(tmp->pgrp != tmp->tpgid) continue;
|
||||||
|
if(best && tmp->start_time <= best->start_time) continue;
|
||||||
|
best = tmp;
|
||||||
|
}
|
103
srcpkgs/procps/patches/watch.1.patch
Normal file
103
srcpkgs/procps/patches/watch.1.patch
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
Description: Cleanup of manual page and cumulative is a parameter not option
|
||||||
|
Author: jidanni@jidanni.org
|
||||||
|
Bug-Debian: http://bugs.debian.org/527193
|
||||||
|
Reviewed-by: Craig Small <csmall@debian.org>
|
||||||
|
Index: b/watch.1
|
||||||
|
===================================================================
|
||||||
|
--- a/watch.1 2009-11-24 20:53:04.000000000 +1100
|
||||||
|
+++ b/watch.1 2009-11-24 21:00:36.000000000 +1100
|
||||||
|
@@ -1,45 +1,54 @@
|
||||||
|
-.TH WATCH 1 "1999 Apr 3" " " "Linux User's Manual"
|
||||||
|
+.TH WATCH 1 "2009 May 11" " " "Linux User's Manual"
|
||||||
|
.SH NAME
|
||||||
|
watch \- execute a program periodically, showing output fullscreen
|
||||||
|
.SH SYNOPSIS
|
||||||
|
+.na
|
||||||
|
.B watch
|
||||||
|
-.I [\-dhvt] [\-n <seconds>] [\-\-differences[=cumulative]] [\-\-help] [\-\-interval=<seconds>] [\-\-no\-title] [\-\-version] <command>
|
||||||
|
+.RB [ \-dhvt ]
|
||||||
|
+.RB [ \-n
|
||||||
|
+.IR seconds ]
|
||||||
|
+.RB [ \-\-differences[=\fIcumulative\fP]]
|
||||||
|
+.RB [ \-\-help ]
|
||||||
|
+.RB [ \-\-interval=\fIseconds\fP]
|
||||||
|
+.RB [ \-\-no\-title ]
|
||||||
|
+.RB [ \-\-version ]
|
||||||
|
+.I command
|
||||||
|
.SH DESCRIPTION
|
||||||
|
-.BR watch
|
||||||
|
+.B watch
|
||||||
|
runs
|
||||||
|
.I command
|
||||||
|
repeatedly, displaying its output (the first screenfull). This allows you to
|
||||||
|
watch the program output change over time. By default, the program is run
|
||||||
|
every 2 seconds; use
|
||||||
|
-.I -n
|
||||||
|
+.B \-n
|
||||||
|
or
|
||||||
|
-.I --interval
|
||||||
|
+.B \-\-interval
|
||||||
|
to specify a different interval.
|
||||||
|
.PP
|
||||||
|
The
|
||||||
|
-.I -d
|
||||||
|
+.B \-d
|
||||||
|
or
|
||||||
|
-.I --differences
|
||||||
|
-flag will highlight the differences between successive updates. The
|
||||||
|
-.I --cumulative
|
||||||
|
-option makes highlighting "sticky", presenting a running display of all
|
||||||
|
+.B \-\-differences
|
||||||
|
+flag will highlight the differences between successive updates. Using
|
||||||
|
+.B \-\-differences=\fIcumulative\fP
|
||||||
|
+makes highlighting "sticky", presenting a running display of all
|
||||||
|
positions that have ever changed. The
|
||||||
|
-.I -t
|
||||||
|
+.B \-t
|
||||||
|
or
|
||||||
|
-.I --no-title
|
||||||
|
+.B \-\-no\-title
|
||||||
|
option turns off the header showing the interval, command, and current
|
||||||
|
time at the top of the display, as well as the following blank line.
|
||||||
|
.PP
|
||||||
|
-.BR watch
|
||||||
|
+.B watch
|
||||||
|
will run until interrupted.
|
||||||
|
.SH NOTE
|
||||||
|
Note that
|
||||||
|
.I command
|
||||||
|
-is given to "sh -c"
|
||||||
|
+is given to "sh \-c"
|
||||||
|
which means that you may need to use extra quoting to get the desired effect.
|
||||||
|
.PP
|
||||||
|
Note that POSIX option processing is used (i.e., option processing stops at
|
||||||
|
-the first non-option argument). This means that flags after
|
||||||
|
+the first non\-option argument). This means that flags after
|
||||||
|
.I command
|
||||||
|
don't get interpreted by
|
||||||
|
.BR watch
|
||||||
|
@@ -61,20 +70,20 @@
|
||||||
|
To see the effects of quoting, try these out
|
||||||
|
.IP
|
||||||
|
watch echo $$
|
||||||
|
-.IP
|
||||||
|
+.br
|
||||||
|
watch echo '$$'
|
||||||
|
-.IP
|
||||||
|
+.br
|
||||||
|
watch echo "'"'$$'"'"
|
||||||
|
.PP
|
||||||
|
You can watch for your administrator to install the latest kernel with
|
||||||
|
.IP
|
||||||
|
-watch uname -r
|
||||||
|
+watch uname \-r
|
||||||
|
.PP
|
||||||
|
(Just kidding.)
|
||||||
|
.SH BUGS
|
||||||
|
Upon terminal resize, the screen will not be correctly repainted until the
|
||||||
|
next scheduled update. All
|
||||||
|
-.I --differences
|
||||||
|
+.B \-\-differences
|
||||||
|
highlighting is lost on that update as well.
|
||||||
|
.PP
|
||||||
|
Non-printing characters are stripped from program output. Use "cat -v" as
|
15
srcpkgs/procps/patches/watch_8bitchar.patch
Normal file
15
srcpkgs/procps/patches/watch_8bitchar.patch
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
Author: <csmall@debian.org>
|
||||||
|
Description: Make watch unsigned chars and 8bit clean
|
||||||
|
Index: b/watch.c
|
||||||
|
===================================================================
|
||||||
|
--- a/watch.c 2009-11-24 20:53:03.000000000 +1100
|
||||||
|
+++ b/watch.c 2009-11-24 21:00:40.000000000 +1100
|
||||||
|
@@ -297,7 +297,7 @@
|
||||||
|
move(y, x);
|
||||||
|
if (option_differences) {
|
||||||
|
chtype oldch = inch();
|
||||||
|
- char oldc = oldch & A_CHARTEXT;
|
||||||
|
+ unsigned char oldc = oldch & A_CHARTEXT;
|
||||||
|
attr = !first_screen
|
||||||
|
&& ((char)c != oldc
|
||||||
|
||
|
180
srcpkgs/procps/patches/watch_ansi_colour.patch
Normal file
180
srcpkgs/procps/patches/watch_ansi_colour.patch
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
Description: Interprets ANSI color code sequences
|
||||||
|
Bug-Debian: http://bugs.debian.org/129334
|
||||||
|
Author: Craig Small <csmall@debian.org>
|
||||||
|
Last-Update: 2010-03-01
|
||||||
|
--- a/watch.c
|
||||||
|
+++ b/watch.c
|
||||||
|
@@ -37,6 +37,7 @@
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static struct option longopts[] = {
|
||||||
|
+ {"color", no_argument, 0, 'c' },
|
||||||
|
{"differences", optional_argument, 0, 'd'},
|
||||||
|
{"help", no_argument, 0, 'h'},
|
||||||
|
{"interval", required_argument, 0, 'n'},
|
||||||
|
@@ -50,7 +51,7 @@
|
||||||
|
};
|
||||||
|
|
||||||
|
static char usage[] =
|
||||||
|
- "Usage: %s [-bdhnptvx] [--beep] [--differences[=cumulative]] [--exec] [--help] [--interval=<n>] [--no-title] [--version] <command>\n";
|
||||||
|
+ "Usage: %s [-bcdhnptvx] [--beep] [--color] [--differences[=cumulative]] [--exec] [--help] [--interval=<n>] [--no-title] [--version] <command>\n";
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
@@ -62,6 +63,74 @@
|
||||||
|
static int precise_timekeeping = 0;
|
||||||
|
|
||||||
|
#define min(x,y) ((x) > (y) ? (y) : (x))
|
||||||
|
+#define MAX_ANSIBUF 10
|
||||||
|
+
|
||||||
|
+static void init_ansi_colors(void)
|
||||||
|
+{
|
||||||
|
+ int i;
|
||||||
|
+ short ncurses_colors[] = {
|
||||||
|
+ COLOR_BLACK, COLOR_RED, COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE,
|
||||||
|
+ COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE };
|
||||||
|
+
|
||||||
|
+ for (i=0; i< 8; i++)
|
||||||
|
+ init_pair(i+1, ncurses_colors[i], -1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void set_ansi_attribute(const int attrib)
|
||||||
|
+{
|
||||||
|
+ switch (attrib)
|
||||||
|
+ {
|
||||||
|
+ case -1:
|
||||||
|
+ return;
|
||||||
|
+ case 0:
|
||||||
|
+ standend();
|
||||||
|
+ return;
|
||||||
|
+ case 1:
|
||||||
|
+ attrset(A_BOLD);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ if (attrib >= 30 && attrib <= 37) {
|
||||||
|
+ color_set(attrib-29,NULL);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void process_ansi(FILE *fp)
|
||||||
|
+{
|
||||||
|
+ int i,c, num1, num2;
|
||||||
|
+ char buf[MAX_ANSIBUF];
|
||||||
|
+ char *nextnum;
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+ c= getc(fp);
|
||||||
|
+ if (c != '[') {
|
||||||
|
+ ungetc(c, fp);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ for(i=0; i<MAX_ANSIBUF; i++)
|
||||||
|
+ {
|
||||||
|
+ c = getc(fp);
|
||||||
|
+ if (c == 'm') //COLOUR SEQUENCE ENDS in 'm'
|
||||||
|
+ {
|
||||||
|
+ buf[i] = '\0';
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ if (c < '0' && c > '9' && c != ';')
|
||||||
|
+ {
|
||||||
|
+ while(--i >= 0)
|
||||||
|
+ ungetc(buf[i],fp);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ buf[i] = (char)c;
|
||||||
|
+ }
|
||||||
|
+ num1 = strtol(buf, &nextnum, 10);
|
||||||
|
+ if (nextnum != buf && nextnum[0] != '\0')
|
||||||
|
+ num2 = strtol(nextnum+1, NULL, 10);
|
||||||
|
+ else
|
||||||
|
+ num2 = -1;
|
||||||
|
+ set_ansi_attribute(num1);
|
||||||
|
+ set_ansi_attribute(num2);
|
||||||
|
+}
|
||||||
|
|
||||||
|
static void do_usage(void) NORETURN;
|
||||||
|
static void do_usage(void)
|
||||||
|
@@ -187,6 +256,7 @@
|
||||||
|
option_differences_cumulative = 0,
|
||||||
|
option_exec = 0,
|
||||||
|
option_beep = 0,
|
||||||
|
+ option_color = 0,
|
||||||
|
option_errexit = 0,
|
||||||
|
option_help = 0, option_version = 0;
|
||||||
|
double interval = 2;
|
||||||
|
@@ -205,12 +275,15 @@
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
- while ((optc = getopt_long(argc, argv, "+bed::hn:pvtx", longopts, (int *) 0))
|
||||||
|
+ while ((optc = getopt_long(argc, argv, "+bced::hn:pvtx", longopts, (int *) 0))
|
||||||
|
!= EOF) {
|
||||||
|
switch (optc) {
|
||||||
|
case 'b':
|
||||||
|
option_beep = 1;
|
||||||
|
break;
|
||||||
|
+ case 'c':
|
||||||
|
+ option_color = 1;
|
||||||
|
+ break;
|
||||||
|
case 'd':
|
||||||
|
option_differences = 1;
|
||||||
|
if (optarg)
|
||||||
|
@@ -319,6 +392,14 @@
|
||||||
|
/* Set up tty for curses use. */
|
||||||
|
curses_started = 1;
|
||||||
|
initscr();
|
||||||
|
+ if (option_color) {
|
||||||
|
+ if (has_colors()) {
|
||||||
|
+ start_color();
|
||||||
|
+ use_default_colors();
|
||||||
|
+ init_ansi_colors();
|
||||||
|
+ } else
|
||||||
|
+ option_color = 0;
|
||||||
|
+ }
|
||||||
|
nonl();
|
||||||
|
noecho();
|
||||||
|
cbreak();
|
||||||
|
@@ -460,7 +541,13 @@
|
||||||
|
}while (c != WEOF && !isprint(c) && c<128
|
||||||
|
&& wcwidth(c) == 0
|
||||||
|
&& c != L'\n'
|
||||||
|
- && c != L'\t');
|
||||||
|
+ && c != L'\t'
|
||||||
|
+ && (c != L'\033' || option_color != 1));
|
||||||
|
+ if (c == L'\033' && option_color == 1) {
|
||||||
|
+ x--;
|
||||||
|
+ process_ansi(p);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
if (c == L'\n')
|
||||||
|
if (!oldeolseen && x == 0) {
|
||||||
|
x = -1;
|
||||||
|
--- a/watch.1
|
||||||
|
+++ b/watch.1
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
-.TH WATCH 1 "2009 May 11" " " "Linux User's Manual"
|
||||||
|
+.TH WATCH 1 "2010 Mar 01" " " "Linux User's Manual"
|
||||||
|
.SH NAME
|
||||||
|
watch \- execute a program periodically, showing output fullscreen
|
||||||
|
.SH SYNOPSIS
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
.RB [ \-n
|
||||||
|
.IR seconds ]
|
||||||
|
.RB [ \-\-beep ]
|
||||||
|
+.RB [ \-\-color ]
|
||||||
|
.RB [ \-\-differences[=\fIcumulative\fP]]
|
||||||
|
.RB [ \-\-errexit ]
|
||||||
|
.RB [ \-\-exec ]
|
||||||
|
@@ -75,6 +76,10 @@
|
||||||
|
options, which will cause
|
||||||
|
.B watch
|
||||||
|
to exit if the return value from the program is non-zero.
|
||||||
|
+.PP
|
||||||
|
+By default \fBwatch\fR will normally not pass escape characters, however
|
||||||
|
+if you use the \fI\-\-c\fR or \fI\-\-color\fR option, then
|
||||||
|
+\fBwatch\fR will interpret ANSI color sequences for the foreground.
|
||||||
|
|
||||||
|
.SH NOTE
|
||||||
|
Note that
|
259
srcpkgs/procps/patches/watch_exec_beep.patch
Normal file
259
srcpkgs/procps/patches/watch_exec_beep.patch
Normal file
|
@ -0,0 +1,259 @@
|
||||||
|
Description: Adds -exec and -beep flags and has better quoting #410967
|
||||||
|
Adds -errexit flag now too #183346
|
||||||
|
Author: Mordechai T. Abzug <morty@frakir.org>
|
||||||
|
Bug-Debian: http://bugs.debian.org/410967
|
||||||
|
Bug-Debian: http://bugs.debian.org/183346
|
||||||
|
Reviewed-by: Craig Small <csmall@debian.org>
|
||||||
|
Index: b/watch.1
|
||||||
|
===================================================================
|
||||||
|
--- a/watch.1 2009-11-24 21:00:36.000000000 +1100
|
||||||
|
+++ b/watch.1 2009-11-24 21:00:43.000000000 +1100
|
||||||
|
@@ -4,10 +4,13 @@
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.na
|
||||||
|
.B watch
|
||||||
|
-.RB [ \-dhvt ]
|
||||||
|
+.RB [ \-bdehvtx ]
|
||||||
|
.RB [ \-n
|
||||||
|
.IR seconds ]
|
||||||
|
+.RB [ \-\-beep ]
|
||||||
|
.RB [ \-\-differences[=\fIcumulative\fP]]
|
||||||
|
+.RB [ \-\-errexit ]
|
||||||
|
+.RB [ \-\-exec ]
|
||||||
|
.RB [ \-\-help ]
|
||||||
|
.RB [ \-\-interval=\fIseconds\fP]
|
||||||
|
.RB [ \-\-no\-title ]
|
||||||
|
@@ -17,7 +20,8 @@
|
||||||
|
.B watch
|
||||||
|
runs
|
||||||
|
.I command
|
||||||
|
-repeatedly, displaying its output (the first screenfull). This allows you to
|
||||||
|
+repeatedly, displaying its output and errors (the first screenfull). This
|
||||||
|
+allows you to
|
||||||
|
watch the program output change over time. By default, the program is run
|
||||||
|
every 2 seconds; use
|
||||||
|
.B \-n
|
||||||
|
@@ -37,15 +41,33 @@
|
||||||
|
or
|
||||||
|
.B \-\-no\-title
|
||||||
|
option turns off the header showing the interval, command, and current
|
||||||
|
-time at the top of the display, as well as the following blank line.
|
||||||
|
+time at the top of the display, as well as the following blank line. The
|
||||||
|
+.I \-b
|
||||||
|
+or
|
||||||
|
+.I \-\-beep
|
||||||
|
+option causes the command to beep if it has a non-zero exit.
|
||||||
|
.PP
|
||||||
|
.B watch
|
||||||
|
-will run until interrupted.
|
||||||
|
+will normally run until interrupted. If you want
|
||||||
|
+.B watch
|
||||||
|
+to exit on an error from the program running use the
|
||||||
|
+.I \-e
|
||||||
|
+or
|
||||||
|
+.I \-\-errexit
|
||||||
|
+options, which will cause
|
||||||
|
+.B watch
|
||||||
|
+to exit if the return value from the program is non-zero.
|
||||||
|
+
|
||||||
|
.SH NOTE
|
||||||
|
Note that
|
||||||
|
.I command
|
||||||
|
is given to "sh \-c"
|
||||||
|
which means that you may need to use extra quoting to get the desired effect.
|
||||||
|
+You can disable this with the
|
||||||
|
+.I -x
|
||||||
|
+or
|
||||||
|
+.I --exec
|
||||||
|
+option, which passes the command to exec(2) instead.
|
||||||
|
.PP
|
||||||
|
Note that POSIX option processing is used (i.e., option processing stops at
|
||||||
|
the first non\-option argument). This means that flags after
|
||||||
|
@@ -93,4 +115,5 @@
|
||||||
|
.B watch
|
||||||
|
was written by Tony Rems <rembo@unisoft.com> in 1991, with mods and
|
||||||
|
corrections by Francois Pinard. It was reworked and new features added by
|
||||||
|
-Mike Coleman <mkc@acm.org> in 1999.
|
||||||
|
+Mike Coleman <mkc@acm.org> in 1999. The beep, exec, and error handling
|
||||||
|
+features were added by Morty Abzug <morty@frakir.org> in 2008.
|
||||||
|
Index: b/watch.c
|
||||||
|
===================================================================
|
||||||
|
--- a/watch.c 2009-11-24 21:00:40.000000000 +1100
|
||||||
|
+++ b/watch.c 2009-11-24 21:00:43.000000000 +1100
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
* Mike Coleman <mkc@acm.org>.
|
||||||
|
*
|
||||||
|
* Changes by Albert Cahalan, 2002-2003.
|
||||||
|
+ * stderr handling, exec, and beep option added by Morty Abzug, 2008
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define VERSION "0.2.0"
|
||||||
|
@@ -35,13 +36,16 @@
|
||||||
|
{"differences", optional_argument, 0, 'd'},
|
||||||
|
{"help", no_argument, 0, 'h'},
|
||||||
|
{"interval", required_argument, 0, 'n'},
|
||||||
|
+ {"beep", no_argument, 0, 'b'},
|
||||||
|
+ {"errexit", no_argument, 0, 'e'},
|
||||||
|
+ {"exec", no_argument, 0, 'x'},
|
||||||
|
{"no-title", no_argument, 0, 't'},
|
||||||
|
{"version", no_argument, 0, 'v'},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static char usage[] =
|
||||||
|
- "Usage: %s [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>] [--no-title] [--version] <command>\n";
|
||||||
|
+ "Usage: %s [-bdhntvx] [--beep] [--differences[=cumulative]] [--exec] [--help] [--interval=<n>] [--no-title] [--version] <command>\n";
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
@@ -140,28 +144,44 @@
|
||||||
|
int optc;
|
||||||
|
int option_differences = 0,
|
||||||
|
option_differences_cumulative = 0,
|
||||||
|
+ option_exec = 0,
|
||||||
|
+ option_beep = 0,
|
||||||
|
+ option_errexit = 0,
|
||||||
|
option_help = 0, option_version = 0;
|
||||||
|
double interval = 2;
|
||||||
|
char *command;
|
||||||
|
+ char **command_argv;
|
||||||
|
int command_length = 0; /* not including final \0 */
|
||||||
|
+ int pipefd[2];
|
||||||
|
+ int status;
|
||||||
|
+ pid_t child;
|
||||||
|
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
- while ((optc = getopt_long(argc, argv, "+d::hn:vt", longopts, (int *) 0))
|
||||||
|
+ while ((optc = getopt_long(argc, argv, "+bed::hn:vtx", longopts, (int *) 0))
|
||||||
|
!= EOF) {
|
||||||
|
switch (optc) {
|
||||||
|
+ case 'b':
|
||||||
|
+ option_beep = 1;
|
||||||
|
+ break;
|
||||||
|
case 'd':
|
||||||
|
option_differences = 1;
|
||||||
|
if (optarg)
|
||||||
|
option_differences_cumulative = 1;
|
||||||
|
break;
|
||||||
|
+ case 'e':
|
||||||
|
+ option_errexit = 1;
|
||||||
|
+ break;
|
||||||
|
case 'h':
|
||||||
|
option_help = 1;
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
show_title = 0;
|
||||||
|
break;
|
||||||
|
+ case 'x':
|
||||||
|
+ option_exec = 1;
|
||||||
|
+ break;
|
||||||
|
case 'n':
|
||||||
|
{
|
||||||
|
char *str;
|
||||||
|
@@ -191,18 +211,23 @@
|
||||||
|
|
||||||
|
if (option_help) {
|
||||||
|
fprintf(stderr, usage, progname);
|
||||||
|
+ fputs(" -b, --beep\t\t\t\tbeep if the command has a non-zero exit\n", stderr);
|
||||||
|
fputs(" -d, --differences[=cumulative]\thighlight changes between updates\n", stderr);
|
||||||
|
fputs("\t\t(cumulative means highlighting is cumulative)\n", stderr);
|
||||||
|
+ fputs(" -e, --errexit\t\t\t\texit watch if the command has a non-zero exit\n", stderr);
|
||||||
|
fputs(" -h, --help\t\t\t\tprint a summary of the options\n", stderr);
|
||||||
|
fputs(" -n, --interval=<seconds>\t\tseconds to wait between updates\n", stderr);
|
||||||
|
fputs(" -v, --version\t\t\t\tprint the version number\n", stderr);
|
||||||
|
fputs(" -t, --no-title\t\t\tturns off showing the header\n", stderr);
|
||||||
|
+ fputs(" -x, --exec\t\t\t\tpass command to exec instead of sh\n", stderr);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optind >= argc)
|
||||||
|
do_usage();
|
||||||
|
|
||||||
|
+ command_argv=&(argv[optind]); /* save for later */
|
||||||
|
+
|
||||||
|
command = strdup(argv[optind++]);
|
||||||
|
command_length = strlen(command);
|
||||||
|
for (; optind < argc; optind++) {
|
||||||
|
@@ -261,11 +286,57 @@
|
||||||
|
free(header);
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!(p = popen(command, "r"))) {
|
||||||
|
- perror("popen");
|
||||||
|
+ /* allocate pipes */
|
||||||
|
+ if (pipe(pipefd)<0) {
|
||||||
|
+ perror("pipe");
|
||||||
|
+ do_exit(7);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* flush stdout and stderr, since we're about to do fd stuff */
|
||||||
|
+ fflush(stdout);
|
||||||
|
+ fflush(stderr);
|
||||||
|
+
|
||||||
|
+ /* fork to prepare to run command */
|
||||||
|
+ child=fork();
|
||||||
|
+
|
||||||
|
+ if (child<0) { /* fork error */
|
||||||
|
+ perror("fork");
|
||||||
|
do_exit(2);
|
||||||
|
+ } else if (child==0) { /* in child */
|
||||||
|
+ close (pipefd[0]); /* child doesn't need read side of pipe */
|
||||||
|
+ close (1); /* prepare to replace stdout with pipe */
|
||||||
|
+ if (dup2 (pipefd[1], 1)<0) { /* replace stdout with write side of pipe */
|
||||||
|
+ perror("dup2");
|
||||||
|
+ exit(3);
|
||||||
|
+ }
|
||||||
|
+ dup2(1, 2); /* stderr should default to stdout */
|
||||||
|
+
|
||||||
|
+ if (option_exec) { /* pass command to exec instead of system */
|
||||||
|
+ if (execvp(command_argv[0], command_argv)==-1) {
|
||||||
|
+ perror("exec");
|
||||||
|
+ exit(4);
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ status=system(command); /* watch manpage promises sh quoting */
|
||||||
|
+
|
||||||
|
+ /* propagate command exit status as child exit status */
|
||||||
|
+ if (!WIFEXITED(status)) { /* child exits nonzero if command does */
|
||||||
|
+ exit(1);
|
||||||
|
+ } else {
|
||||||
|
+ exit(WEXITSTATUS(status));
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /* otherwise, we're in parent */
|
||||||
|
+ close(pipefd[1]); /* close write side of pipe */
|
||||||
|
+ if ((p=fdopen(pipefd[0], "r"))==NULL) {
|
||||||
|
+ perror("fdopen");
|
||||||
|
+ do_exit(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
for (y = show_title; y < height; y++) {
|
||||||
|
int eolseen = 0, tabpending = 0;
|
||||||
|
for (x = 0; x < width; x++) {
|
||||||
|
@@ -313,7 +384,19 @@
|
||||||
|
oldeolseen = eolseen;
|
||||||
|
}
|
||||||
|
|
||||||
|
- pclose(p);
|
||||||
|
+ fclose(p);
|
||||||
|
+
|
||||||
|
+ /* harvest child process and get status, propagated from command */
|
||||||
|
+ if (waitpid(child, &status, 0)<0) {
|
||||||
|
+ perror("waitpid");
|
||||||
|
+ do_exit(8);
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ /* if child process exited in error, beep if option_beep is set */
|
||||||
|
+ if ((!WIFEXITED(status) || WEXITSTATUS(status))) {
|
||||||
|
+ if (option_beep) beep();
|
||||||
|
+ if (option_errexit) do_exit(8);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
first_screen = 0;
|
||||||
|
refresh();
|
216
srcpkgs/procps/patches/watch_precision_time.patch
Normal file
216
srcpkgs/procps/patches/watch_precision_time.patch
Normal file
|
@ -0,0 +1,216 @@
|
||||||
|
Description: Add precision wait time option -p
|
||||||
|
Author: Anthony DeRobertis <asd@suespammers.org>
|
||||||
|
Bug-Debian: http://bugs.debian.org/183486
|
||||||
|
Reviewed-by: Craig Small <csmall@debian.org>
|
||||||
|
Index: b/watch.1
|
||||||
|
===================================================================
|
||||||
|
--- a/watch.1 2009-11-24 21:00:43.000000000 +1100
|
||||||
|
+++ b/watch.1 2009-11-24 21:00:46.000000000 +1100
|
||||||
|
@@ -4,7 +4,7 @@
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.na
|
||||||
|
.B watch
|
||||||
|
-.RB [ \-bdehvtx ]
|
||||||
|
+.RB [ \-bdehpvtx ]
|
||||||
|
.RB [ \-n
|
||||||
|
.IR seconds ]
|
||||||
|
.RB [ \-\-beep ]
|
||||||
|
@@ -14,6 +14,7 @@
|
||||||
|
.RB [ \-\-help ]
|
||||||
|
.RB [ \-\-interval=\fIseconds\fP]
|
||||||
|
.RB [ \-\-no\-title ]
|
||||||
|
+.RB [ \-\-precise ]
|
||||||
|
.RB [ \-\-version ]
|
||||||
|
.I command
|
||||||
|
.SH DESCRIPTION
|
||||||
|
@@ -27,7 +28,24 @@
|
||||||
|
.B \-n
|
||||||
|
or
|
||||||
|
.B \-\-interval
|
||||||
|
-to specify a different interval.
|
||||||
|
+to specify a different interval. Normally, this interval is interpreted
|
||||||
|
+as the amout of time between the completion of one run of
|
||||||
|
+.I command
|
||||||
|
+and the beginning of the next run. However, with the
|
||||||
|
+.I \-p
|
||||||
|
+or
|
||||||
|
+.I \-\-precise
|
||||||
|
+option, you can make
|
||||||
|
+.BR watch
|
||||||
|
+attempt to run
|
||||||
|
+.I command
|
||||||
|
+every
|
||||||
|
+.I interval
|
||||||
|
+seconds. Try it with
|
||||||
|
+.B ntptime
|
||||||
|
+and notice how the fractional seconds stays
|
||||||
|
+(nearly) the same, as opposed to normal mode where they continuously
|
||||||
|
+increase.
|
||||||
|
.PP
|
||||||
|
The
|
||||||
|
.B \-d
|
||||||
|
@@ -97,11 +115,21 @@
|
||||||
|
.br
|
||||||
|
watch echo "'"'$$'"'"
|
||||||
|
.PP
|
||||||
|
+To see the effect of precision time keeping, try adding
|
||||||
|
+.I \-p
|
||||||
|
+to
|
||||||
|
+.IP
|
||||||
|
+watch \-n 10 sleep 1
|
||||||
|
+.PP
|
||||||
|
You can watch for your administrator to install the latest kernel with
|
||||||
|
.IP
|
||||||
|
watch uname \-r
|
||||||
|
.PP
|
||||||
|
-(Just kidding.)
|
||||||
|
+(Note that
|
||||||
|
+.I \-p
|
||||||
|
+isn't guaranteed to work across reboots, especially in the face of
|
||||||
|
+.B ntpdate
|
||||||
|
+or other bootup time-changing mechanisms)
|
||||||
|
.SH BUGS
|
||||||
|
Upon terminal resize, the screen will not be correctly repainted until the
|
||||||
|
next scheduled update. All
|
||||||
|
@@ -110,6 +138,22 @@
|
||||||
|
.PP
|
||||||
|
Non-printing characters are stripped from program output. Use "cat -v" as
|
||||||
|
part of the command pipeline if you want to see them.
|
||||||
|
+.PP
|
||||||
|
+.I \-\-precise
|
||||||
|
+mode doesn't yet have advanced temporal distortion technology to
|
||||||
|
+compensate for a
|
||||||
|
+.I command
|
||||||
|
+that takes more than
|
||||||
|
+.I interval
|
||||||
|
+seconds to execute.
|
||||||
|
+.B watch
|
||||||
|
+also can get into a state where it rapid-fires as many executions of
|
||||||
|
+.I command
|
||||||
|
+as it can to catch up from a previous executions running longer than
|
||||||
|
+.I interval
|
||||||
|
+(for example,
|
||||||
|
+.B netstat
|
||||||
|
+taking ages on a DNS lookup).
|
||||||
|
.SH AUTHORS
|
||||||
|
The original
|
||||||
|
.B watch
|
||||||
|
@@ -117,3 +161,7 @@
|
||||||
|
corrections by Francois Pinard. It was reworked and new features added by
|
||||||
|
Mike Coleman <mkc@acm.org> in 1999. The beep, exec, and error handling
|
||||||
|
features were added by Morty Abzug <morty@frakir.org> in 2008.
|
||||||
|
+On a not so dark and stormy morning
|
||||||
|
+in March of 2003, Anthony DeRobertis <asd@suespammers.org> got sick of
|
||||||
|
+his watches that should update every minute eventually updating many
|
||||||
|
+seconds after the minute started, and added microsecond precision.
|
||||||
|
Index: b/watch.c
|
||||||
|
===================================================================
|
||||||
|
--- a/watch.c 2009-11-24 21:00:43.000000000 +1100
|
||||||
|
+++ b/watch.c 2009-11-24 21:00:46.000000000 +1100
|
||||||
|
@@ -21,6 +21,7 @@
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
+#include <sys/time.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <termios.h>
|
||||||
|
@@ -39,13 +40,14 @@
|
||||||
|
{"beep", no_argument, 0, 'b'},
|
||||||
|
{"errexit", no_argument, 0, 'e'},
|
||||||
|
{"exec", no_argument, 0, 'x'},
|
||||||
|
+ {"precise", no_argument, 0, 'p'},
|
||||||
|
{"no-title", no_argument, 0, 't'},
|
||||||
|
{"version", no_argument, 0, 'v'},
|
||||||
|
{0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static char usage[] =
|
||||||
|
- "Usage: %s [-bdhntvx] [--beep] [--differences[=cumulative]] [--exec] [--help] [--interval=<n>] [--no-title] [--version] <command>\n";
|
||||||
|
+ "Usage: %s [-bdhnptvx] [--beep] [--differences[=cumulative]] [--exec] [--help] [--interval=<n>] [--no-title] [--version] <command>\n";
|
||||||
|
|
||||||
|
static char *progname;
|
||||||
|
|
||||||
|
@@ -54,6 +56,7 @@
|
||||||
|
static int screen_size_changed = 0;
|
||||||
|
static int first_screen = 1;
|
||||||
|
static int show_title = 2; // number of lines used, 2 or 0
|
||||||
|
+static int precise_timekeeping = 0;
|
||||||
|
|
||||||
|
#define min(x,y) ((x) > (y) ? (y) : (x))
|
||||||
|
|
||||||
|
@@ -138,6 +141,15 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* get current time in usec */
|
||||||
|
+typedef unsigned long long watch_usec_t;
|
||||||
|
+#define USECS_PER_SEC (1000000ull)
|
||||||
|
+watch_usec_t get_time_usec() {
|
||||||
|
+ struct timeval now;
|
||||||
|
+ gettimeofday(&now, NULL);
|
||||||
|
+ return USECS_PER_SEC*now.tv_sec + now.tv_usec;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
@@ -152,6 +164,8 @@
|
||||||
|
char *command;
|
||||||
|
char **command_argv;
|
||||||
|
int command_length = 0; /* not including final \0 */
|
||||||
|
+ watch_usec_t next_loop; /* next loop time in us, used for precise time
|
||||||
|
+ keeping only */
|
||||||
|
int pipefd[2];
|
||||||
|
int status;
|
||||||
|
pid_t child;
|
||||||
|
@@ -159,7 +173,7 @@
|
||||||
|
setlocale(LC_ALL, "");
|
||||||
|
progname = argv[0];
|
||||||
|
|
||||||
|
- while ((optc = getopt_long(argc, argv, "+bed::hn:vtx", longopts, (int *) 0))
|
||||||
|
+ while ((optc = getopt_long(argc, argv, "+bed::hn:pvtx", longopts, (int *) 0))
|
||||||
|
!= EOF) {
|
||||||
|
switch (optc) {
|
||||||
|
case 'b':
|
||||||
|
@@ -194,6 +208,9 @@
|
||||||
|
interval = ~0u/1000000;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
+ case 'p':
|
||||||
|
+ precise_timekeeping = 1;
|
||||||
|
+ break;
|
||||||
|
case 'v':
|
||||||
|
option_version = 1;
|
||||||
|
break;
|
||||||
|
@@ -217,6 +234,7 @@
|
||||||
|
fputs(" -e, --errexit\t\t\t\texit watch if the command has a non-zero exit\n", stderr);
|
||||||
|
fputs(" -h, --help\t\t\t\tprint a summary of the options\n", stderr);
|
||||||
|
fputs(" -n, --interval=<seconds>\t\tseconds to wait between updates\n", stderr);
|
||||||
|
+ fputs(" -p, --precise\t\t\t\tprecise timing, ignore command run time\n", stderr);
|
||||||
|
fputs(" -v, --version\t\t\t\tprint the version number\n", stderr);
|
||||||
|
fputs(" -t, --no-title\t\t\tturns off showing the header\n", stderr);
|
||||||
|
fputs(" -x, --exec\t\t\t\tpass command to exec instead of sh\n", stderr);
|
||||||
|
@@ -256,6 +274,9 @@
|
||||||
|
noecho();
|
||||||
|
cbreak();
|
||||||
|
|
||||||
|
+ if (precise_timekeeping)
|
||||||
|
+ next_loop = get_time_usec();
|
||||||
|
+
|
||||||
|
for (;;) {
|
||||||
|
time_t t = time(NULL);
|
||||||
|
char *ts = ctime(&t);
|
||||||
|
@@ -400,6 +421,12 @@
|
||||||
|
|
||||||
|
first_screen = 0;
|
||||||
|
refresh();
|
||||||
|
+ if (precise_timekeeping) {
|
||||||
|
+ watch_usec_t cur_time = get_time_usec();
|
||||||
|
+ next_loop += USECS_PER_SEC*interval;
|
||||||
|
+ if (cur_time < next_loop)
|
||||||
|
+ usleep(next_loop - cur_time);
|
||||||
|
+ } else
|
||||||
|
usleep(interval * 1000000);
|
||||||
|
}
|
||||||
|
|
292
srcpkgs/procps/patches/watch_unicode.patch
Normal file
292
srcpkgs/procps/patches/watch_unicode.patch
Normal file
|
@ -0,0 +1,292 @@
|
||||||
|
Description: Unicode/8bit for watch
|
||||||
|
Bug-Debian: http://bugs.debian.org/240989
|
||||||
|
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/procps/+bug/318221
|
||||||
|
Author: Jarrod Lowe <ubuntu@rrod.net>
|
||||||
|
--- a/AUTHORS
|
||||||
|
+++ b/AUTHORS
|
||||||
|
@@ -47,4 +47,5 @@
|
||||||
|
watch:
|
||||||
|
Tony Rems <rembo@unisoft.com>
|
||||||
|
Mike Coleman <mkc@acm.org>
|
||||||
|
+Jarrod Lowe <procps@rrod.net>
|
||||||
|
|
||||||
|
--- a/Makefile
|
||||||
|
+++ b/Makefile
|
||||||
|
@@ -68,6 +68,7 @@
|
||||||
|
_TARFILES := Makefile
|
||||||
|
|
||||||
|
CURSES := -lncurses
|
||||||
|
+CURSESW := -lncursesw
|
||||||
|
|
||||||
|
# This seems about right for the dynamic library stuff.
|
||||||
|
# Something like this is probably needed to make the SE Linux
|
||||||
|
@@ -119,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) > /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 /dev/null $(CURSES) $(CURSESW) > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
|
||||||
|
|
||||||
|
# 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
|
||||||
|
@@ -250,7 +251,7 @@
|
||||||
|
$(CC) $(ALL_CFLAGS) $^ $(ALL_LDFLAGS) -o $@ $(CURSES)
|
||||||
|
|
||||||
|
watch: % : %.o
|
||||||
|
- $(CC) $(ALL_CFLAGS) $^ $(ALL_LDFLAGS) -o $@ $(CURSES)
|
||||||
|
+ $(CC) $(ALL_CFLAGS) $^ $(ALL_LDFLAGS) -o $@ $(CURSESW)
|
||||||
|
|
||||||
|
############ progX --> progY
|
||||||
|
|
||||||
|
--- a/watch.1
|
||||||
|
+++ b/watch.1
|
||||||
|
@@ -139,6 +139,17 @@
|
||||||
|
Non-printing characters are stripped from program output. Use "cat -v" as
|
||||||
|
part of the command pipeline if you want to see them.
|
||||||
|
.PP
|
||||||
|
+Combining Characters that are supposed to display on the character at the
|
||||||
|
+last column on the screen may display one column early, or they may not
|
||||||
|
+display at all.
|
||||||
|
+.PP
|
||||||
|
+Combining Characters never count as different in
|
||||||
|
+.I \-\-differences
|
||||||
|
+mode. Only the base character counts.
|
||||||
|
+.PP
|
||||||
|
+Blank lines directly after a line which ends in the last column do not
|
||||||
|
+display.
|
||||||
|
+.PP
|
||||||
|
.I \-\-precise
|
||||||
|
mode doesn't yet have advanced temporal distortion technology to
|
||||||
|
compensate for a
|
||||||
|
@@ -165,3 +176,4 @@
|
||||||
|
in March of 2003, Anthony DeRobertis <asd@suespammers.org> got sick of
|
||||||
|
his watches that should update every minute eventually updating many
|
||||||
|
seconds after the minute started, and added microsecond precision.
|
||||||
|
+Unicode support was added in 2009 by Jarrod Lowe <procps@rrod.net>.
|
||||||
|
--- a/watch.c
|
||||||
|
+++ b/watch.c
|
||||||
|
@@ -9,14 +9,16 @@
|
||||||
|
*
|
||||||
|
* Changes by Albert Cahalan, 2002-2003.
|
||||||
|
* stderr handling, exec, and beep option added by Morty Abzug, 2008
|
||||||
|
+ * Unicode Support added by Jarrod Lowe <procps@rrod.net> in 2009.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-#define VERSION "0.2.0"
|
||||||
|
+#define VERSION "0.3.0"
|
||||||
|
|
||||||
|
+#include <wchar.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <signal.h>
|
||||||
|
-#include <ncurses.h>
|
||||||
|
+#include <ncursesw/ncurses.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
@@ -27,6 +29,7 @@
|
||||||
|
#include <termios.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include "proc/procps.h"
|
||||||
|
+#include <errno.h>
|
||||||
|
|
||||||
|
#ifdef FORCE_8BIT
|
||||||
|
#undef isprint
|
||||||
|
@@ -150,6 +153,32 @@
|
||||||
|
return USECS_PER_SEC*now.tv_sec + now.tv_usec;
|
||||||
|
}
|
||||||
|
|
||||||
|
+// read a wide character from a popen'd stream
|
||||||
|
+#define MAX_ENC_BYTES 16
|
||||||
|
+wint_t my_getwc(FILE *s);
|
||||||
|
+wint_t my_getwc(FILE *s) {
|
||||||
|
+ char i[MAX_ENC_BYTES]; //assuming no encoding ever consumes more than 16 bytes
|
||||||
|
+ int byte = 0;
|
||||||
|
+ int convert;
|
||||||
|
+ int x;
|
||||||
|
+ wchar_t rval;
|
||||||
|
+ while(1) {
|
||||||
|
+ i[byte] = getc(s);
|
||||||
|
+ if (i[byte]==EOF) { return WEOF; }
|
||||||
|
+ byte++;
|
||||||
|
+ errno = 0;
|
||||||
|
+ mbtowc(NULL, NULL, 0);
|
||||||
|
+ convert = mbtowc(&rval, i, byte);
|
||||||
|
+ x = errno;
|
||||||
|
+ if(convert > 0) { return rval; } //legal conversion
|
||||||
|
+ if(byte == MAX_ENC_BYTES) {
|
||||||
|
+ while(byte > 1) { ungetc(i[--byte], s); } //at least *try* to fix up
|
||||||
|
+ errno = -EILSEQ;
|
||||||
|
+ return WEOF;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int
|
||||||
|
main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
@@ -162,8 +191,11 @@
|
||||||
|
option_help = 0, option_version = 0;
|
||||||
|
double interval = 2;
|
||||||
|
char *command;
|
||||||
|
+ wchar_t *wcommand = NULL;
|
||||||
|
char **command_argv;
|
||||||
|
int command_length = 0; /* not including final \0 */
|
||||||
|
+ int wcommand_columns = 0; /* not including final \0 */
|
||||||
|
+ int wcommand_characters = 0; /* not including final \0 */
|
||||||
|
watch_usec_t next_loop; /* next loop time in us, used for precise time
|
||||||
|
keeping only */
|
||||||
|
int pipefd[2];
|
||||||
|
@@ -259,6 +291,23 @@
|
||||||
|
command[command_length] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // convert to wide for printing purposes
|
||||||
|
+ //mbstowcs(NULL, NULL, 0);
|
||||||
|
+ wcommand_characters = mbstowcs(NULL, command, 0);
|
||||||
|
+ if(wcommand_characters < 0) {
|
||||||
|
+ fprintf(stderr, "Unicode Handling Error\n");
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
+ wcommand = (wchar_t*)malloc((wcommand_characters+1) * sizeof(wcommand));
|
||||||
|
+ if(wcommand == NULL) {
|
||||||
|
+ fprintf(stderr, "Unicode Handling Error (malloc)\n");
|
||||||
|
+ exit(1);
|
||||||
|
+ }
|
||||||
|
+ mbstowcs(wcommand, command, wcommand_characters+1);
|
||||||
|
+ wcommand_columns = wcswidth(wcommand, -1);
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+
|
||||||
|
get_terminal_size();
|
||||||
|
|
||||||
|
/* Catch keyboard interrupts so we can put tty back in a sane state. */
|
||||||
|
@@ -298,12 +347,44 @@
|
||||||
|
if (show_title) {
|
||||||
|
// left justify interval and command,
|
||||||
|
// right justify time, clipping all to fit window width
|
||||||
|
- asprintf(&header, "Every %.1fs: %.*s",
|
||||||
|
- interval, min(width - 1, command_length), command);
|
||||||
|
- mvaddstr(0, 0, header);
|
||||||
|
- if (strlen(header) > (size_t) (width - tsl - 1))
|
||||||
|
- mvaddstr(0, width - tsl - 4, "... ");
|
||||||
|
- mvaddstr(0, width - tsl + 1, ts);
|
||||||
|
+
|
||||||
|
+ int hlen = asprintf(&header, "Every %.1fs: ", interval);
|
||||||
|
+
|
||||||
|
+ // the rules:
|
||||||
|
+ // width < tsl : print nothing
|
||||||
|
+ // width < tsl + hlen + 1: print ts
|
||||||
|
+ // width = tsl + hlen + 1: print header, ts
|
||||||
|
+ // width < tsl + hlen + 4: print header, ..., ts
|
||||||
|
+ // width < tsl + hlen + wcommand_columns: print header, truncated wcommand, ..., ts
|
||||||
|
+ // width > "": print header, wcomand, ts
|
||||||
|
+ // this is slightly different from how it used to be
|
||||||
|
+ if(width >= tsl) {
|
||||||
|
+ if(width >= tsl + hlen + 1) {
|
||||||
|
+ mvaddstr(0, 0, header);
|
||||||
|
+ if(width >= tsl + hlen + 2) {
|
||||||
|
+ if(width < tsl + hlen + 4) {
|
||||||
|
+ mvaddstr(0, width - tsl - 4, "... ");
|
||||||
|
+ }else{
|
||||||
|
+ if(width < tsl + hlen + wcommand_columns) {
|
||||||
|
+ // print truncated
|
||||||
|
+ int avail_columns = width - tsl - hlen;
|
||||||
|
+ int using_columns = wcommand_columns;
|
||||||
|
+ int using_characters = wcommand_characters;
|
||||||
|
+ while(using_columns > avail_columns - 4) {
|
||||||
|
+ using_characters--;
|
||||||
|
+ using_columns = wcswidth(wcommand, using_characters);
|
||||||
|
+ }
|
||||||
|
+ mvaddnwstr(0, hlen, wcommand, using_characters);
|
||||||
|
+ mvaddstr(0, width - tsl - 4, "... ");
|
||||||
|
+ }else{
|
||||||
|
+ mvaddwstr(0, hlen, wcommand);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ mvaddstr(0, width - tsl + 1, ts);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
free(header);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -360,47 +441,62 @@
|
||||||
|
|
||||||
|
for (y = show_title; y < height; y++) {
|
||||||
|
int eolseen = 0, tabpending = 0;
|
||||||
|
+ wint_t carry = WEOF;
|
||||||
|
for (x = 0; x < width; x++) {
|
||||||
|
- int c = ' ';
|
||||||
|
+ wint_t c = L' ';
|
||||||
|
int attr = 0;
|
||||||
|
|
||||||
|
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')
|
||||||
|
+ do {
|
||||||
|
+ if(carry == WEOF) {
|
||||||
|
+ c = my_getwc(p);
|
||||||
|
+ }else{
|
||||||
|
+ c = carry;
|
||||||
|
+ carry = WEOF;
|
||||||
|
+ }
|
||||||
|
+ }while (c != WEOF && !isprint(c) && c<128
|
||||||
|
+ && wcwidth(c) == 0
|
||||||
|
+ && 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 (x==width-1 && wcwidth(c)==2) {
|
||||||
|
+ y++;
|
||||||
|
+ x = -1; //process this double-width
|
||||||
|
+ carry = c; //character on the next line
|
||||||
|
+ continue; //because it won't fit here
|
||||||
|
+ }
|
||||||
|
+ if (c == WEOF || c == L'\n' || c == L'\t')
|
||||||
|
+ c = L' ';
|
||||||
|
if (tabpending && (((x + 1) % 8) == 0))
|
||||||
|
tabpending = 0;
|
||||||
|
}
|
||||||
|
move(y, x);
|
||||||
|
if (option_differences) {
|
||||||
|
- chtype oldch = inch();
|
||||||
|
- unsigned char oldc = oldch & A_CHARTEXT;
|
||||||
|
+ cchar_t oldc;
|
||||||
|
+ in_wch(&oldc);
|
||||||
|
attr = !first_screen
|
||||||
|
- && ((char)c != oldc
|
||||||
|
+ && ((wchar_t)c != oldc.chars[0]
|
||||||
|
||
|
||||||
|
(option_differences_cumulative
|
||||||
|
- && (oldch & A_ATTRIBUTES)));
|
||||||
|
+ && (oldc.attr & A_ATTRIBUTES)));
|
||||||
|
}
|
||||||
|
if (attr)
|
||||||
|
standout();
|
||||||
|
- addch(c);
|
||||||
|
+ addnwstr((wchar_t*)&c,1);
|
||||||
|
if (attr)
|
||||||
|
standend();
|
||||||
|
+ if(wcwidth(c) == 0) { x--; }
|
||||||
|
+ if(wcwidth(c) == 2) { x++; }
|
||||||
|
}
|
||||||
|
oldeolseen = eolseen;
|
||||||
|
}
|
|
@ -1,8 +1,9 @@
|
||||||
# Template file for 'procps'
|
# Template file for 'procps'
|
||||||
pkgname=procps
|
pkgname=procps
|
||||||
version=3.2.8
|
version=3.2.8
|
||||||
revision=2
|
revision=4
|
||||||
distfiles="http://procps.sf.net/$pkgname-$version.tar.gz"
|
distfiles="http://procps.sf.net/$pkgname-$version.tar.gz"
|
||||||
|
patch_args="-Np1"
|
||||||
build_style=gnu_makefile
|
build_style=gnu_makefile
|
||||||
short_desc="The /proc file system utilities"
|
short_desc="The /proc file system utilities"
|
||||||
maintainer="Juan RP <xtraeme@gmail.com>"
|
maintainer="Juan RP <xtraeme@gmail.com>"
|
||||||
|
@ -16,5 +17,10 @@ long_desc="
|
||||||
performance improvements, and new features."
|
performance improvements, and new features."
|
||||||
|
|
||||||
Add_dependency run glibc
|
Add_dependency run glibc
|
||||||
Add_dependency run ncurses-libs
|
Add_dependency run ncursesw
|
||||||
Add_dependency build ncurses-devel
|
Add_dependency build ncursesw-devel
|
||||||
|
|
||||||
|
pre_build()
|
||||||
|
{
|
||||||
|
sed -i -e "s|-lncurses$|-lncursesw|g" ${wrksrc}/Makefile
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue