Hello community,
here is the log from the commit of package perl-Proc-ProcessTable for
openSUSE:Factory checked in at 2018-02-09 15:47:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Proc-ProcessTable (Old)
and /work/SRC/openSUSE:Factory/.perl-Proc-ProcessTable.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-Proc-ProcessTable"
Fri Feb 9 15:47:12 2018 rev:11 rq:573957 version:0.55
Changes:
--------
---
/work/SRC/openSUSE:Factory/perl-Proc-ProcessTable/perl-Proc-ProcessTable.changes
2015-08-29 20:04:41.000000000 +0200
+++
/work/SRC/openSUSE:Factory/.perl-Proc-ProcessTable.new/perl-Proc-ProcessTable.changes
2018-02-09 15:47:13.916067969 +0100
@@ -1,0 +2,6 @@
+Wed Feb 7 17:10:15 UTC 2018 - [email protected]
+
+- updated to 0.55
+ see /usr/share/doc/packages/perl-Proc-ProcessTable/Changes
+
+-------------------------------------------------------------------
Old:
----
Proc-ProcessTable-0.53.tar.gz
New:
----
Proc-ProcessTable-0.55.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-Proc-ProcessTable.spec ++++++
--- /var/tmp/diff_new_pack.QqrD3o/_old 2018-02-09 15:47:14.640041972 +0100
+++ /var/tmp/diff_new_pack.QqrD3o/_new 2018-02-09 15:47:14.640041972 +0100
@@ -1,7 +1,7 @@
#
# spec file for package perl-Proc-ProcessTable
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: perl-Proc-ProcessTable
-Version: 0.53
+Version: 0.55
Release: 0
#Upstream: Artistic-1.0 or GPL-1.0+
%define cpan_name Proc-ProcessTable
@@ -25,7 +25,7 @@
License: (Artistic-1.0 or GPL-1.0+) and GPL-2.0
Group: Development/Libraries/Perl
Url: http://search.cpan.org/dist/Proc-ProcessTable/
-Source0:
http://www.cpan.org/authors/id/J/JW/JWB/%{cpan_name}-%{version}.tar.gz
+Source0:
https://cpan.metacpan.org/authors/id/J/JW/JWB/%{cpan_name}-%{version}.tar.gz
Source1: cpanspec.yml
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: perl
@@ -37,7 +37,7 @@
%prep
%setup -q -n %{cpan_name}-%{version}
-find . -type f -print0 | xargs -0 chmod 644
+find . -type f ! -name \*.pl -print0 | xargs -0 chmod 644
%build
%{__perl} Makefile.PL INSTALLDIRS=vendor OPTIMIZE="%{optflags}"
@@ -53,6 +53,6 @@
%files -f %{name}.files
%defattr(-,root,root,755)
-%doc Changes PORTING README README.aix README.bsdi README.cygwin README.darwin
README.dec_osf README.freebsd-kvm README.freebsd-procfs README.hpux
README.linux README.netbsd README.openbsd README.solaris README.sunos
README.unixware TODO
+%doc Changes PORTING README README.aix README.bsdi README.cygwin README.darwin
README.dec_osf README.freebsd-kvm README.freebsd-procfs README.hpux
README.linux README.netbsd README.openbsd README.solaris README.sunos
README.unixware
%changelog
++++++ Proc-ProcessTable-0.53.tar.gz -> Proc-ProcessTable-0.55.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/Killall.pm
new/Proc-ProcessTable-0.55/Killall.pm
--- old/Proc-ProcessTable-0.53/Killall.pm 2015-08-23 11:57:06.000000000
+0200
+++ new/Proc-ProcessTable-0.55/Killall.pm 2017-02-21 01:03:40.000000000
+0100
@@ -49,7 +49,7 @@
$self = 0 unless defined $self;
my $nkilled = 0;
croak("killall: Unsupported signal: $signal") unless is_sig($signal);
- my $t = new Proc::ProcessTable;
+ my $t = Proc::ProcessTable->new;
my $BANG = undef;
foreach my $p (@{$t->table}) {
my $cmndline = $p->{cmndline} || $p->{fname};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/MANIFEST
new/Proc-ProcessTable-0.55/MANIFEST
--- old/Proc-ProcessTable-0.53/MANIFEST 2015-08-24 21:35:47.000000000 +0200
+++ new/Proc-ProcessTable-0.55/MANIFEST 2018-02-01 23:02:42.000000000 +0100
@@ -24,6 +24,7 @@
Process/Process.pm
hints/linux.pl
hints/solaris.pl
+hints/dragonfly.pl
hints/aix.pl
hints/aix_4_2.pl
hints/aix_4_3.pl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/META.json
new/Proc-ProcessTable-0.55/META.json
--- old/Proc-ProcessTable-0.53/META.json 2015-08-24 21:35:47.000000000
+0200
+++ new/Proc-ProcessTable-0.55/META.json 2018-02-01 23:02:41.000000000
+0100
@@ -4,7 +4,7 @@
"Jonathan Swartz <[email protected]>"
],
"dynamic_config" : 1,
- "generated_by" : "ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter
version 2.150001",
+ "generated_by" : "ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter
version 2.150010",
"license" : [
"perl_5"
],
@@ -43,5 +43,6 @@
"url" : "https://github.com/jwbargsten/perl-proc-processtable"
}
},
- "version" : "0.53"
+ "version" : "0.55",
+ "x_serialization_backend" : "JSON::PP version 2.27400_02"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/META.yml
new/Proc-ProcessTable-0.55/META.yml
--- old/Proc-ProcessTable-0.53/META.yml 2015-08-24 21:35:47.000000000 +0200
+++ new/Proc-ProcessTable-0.55/META.yml 2018-02-01 23:02:41.000000000 +0100
@@ -7,7 +7,7 @@
configure_requires:
ExtUtils::MakeMaker: '0'
dynamic_config: 1
-generated_by: 'ExtUtils::MakeMaker version 6.98, CPAN::Meta::Converter version
2.150001'
+generated_by: 'ExtUtils::MakeMaker version 7.24, CPAN::Meta::Converter version
2.150010'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -22,4 +22,5 @@
Storable: '0'
resources:
repository: https://github.com/jwbargsten/perl-proc-processtable
-version: '0.53'
+version: '0.55'
+x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/Process/Process.pm
new/Proc-ProcessTable-0.55/Process/Process.pm
--- old/Proc-ProcessTable-0.53/Process/Process.pm 2015-08-23
11:57:06.000000000 +0200
+++ new/Proc-ProcessTable-0.55/Process/Process.pm 2017-02-21
01:03:44.000000000 +0100
@@ -45,6 +45,7 @@
########################################################
sub kill {
my ($self, $signal) = @_;
+ die "PID " . $self->pid . " not valid." unless($self->pid =~ /^-?\d+$/);
return( kill($signal, $self->pid) );
}
@@ -178,6 +179,6 @@
=head1 SEE ALSO
-Proc::ProcessTable.pm, perl(1).
+L<Proc::ProcessTable>, L<perl(1)>.
=cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/ProcessTable.pm
new/Proc-ProcessTable-0.55/ProcessTable.pm
--- old/Proc-ProcessTable-0.53/ProcessTable.pm 2015-08-24 21:34:37.000000000
+0200
+++ new/Proc-ProcessTable-0.55/ProcessTable.pm 2018-02-01 23:02:07.000000000
+0100
@@ -5,7 +5,6 @@
use strict;
use warnings;
use Carp;
-use Fcntl;
use Config;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK $AUTOLOAD);
@@ -19,7 +18,7 @@
@EXPORT = qw(
);
-$VERSION = '0.53';
+$VERSION = '0.55';
sub AUTOLOAD {
# This AUTOLOAD is used to 'autoload' constants from the constant()
@@ -111,15 +110,25 @@
else
{
$self->_get_tty_list;
- my $old_umask = umask;
- umask 022;
- sysopen( my $ttydevs_fh, $TTYDEVSFILE, O_WRONLY | O_EXCL | O_CREAT )
- or die "$TTYDEVSFILE was created by other process";
+ require File::Temp;
+ require File::Basename;
+
+ my($ttydevs_fh, $ttydevs_tmpfile) =
File::Temp::tempfile('ProcessTable_XXXXXXXX', DIR =>
File::Basename::dirname($TTYDEVSFILE));
+ chmod 0644, $ttydevs_tmpfile;
Storable::store_fd( \%Proc::ProcessTable::TTYDEVS, $ttydevs_fh );
close $ttydevs_fh;
- umask $old_umask;
+ if( !rename $ttydevs_tmpfile, $TTYDEVSFILE )
+ {
+ my $err = $!;
+ unlink $ttydevs_tmpfile;
+ if( !-r $TTYDEVSFILE)
+ {
+ die "Renaming $ttydevs_tmpfile to $TTYDEVSFILE failed: $err";
+ }
+ # else somebody else obviously created the file in the meantime
+ }
}
}
else
@@ -169,9 +178,9 @@
use Proc::ProcessTable;
- $p = new Proc::ProcessTable( 'cache_ttys' => 1 );
- @fields = $p->fields;
- $ref = $p->table;
+ my $p = Proc::ProcessTable->new( 'cache_ttys' => 1 );
+ my @fields = $p->fields;
+ my $ref = $p->table;
=head1 DESCRIPTION
@@ -225,10 +234,10 @@
# A cheap and sleazy version of ps
use Proc::ProcessTable;
- $FORMAT = "%-6s %-10s %-8s %-24s %s\n";
- $t = new Proc::ProcessTable;
+ my $FORMAT = "%-6s %-10s %-8s %-24s %s\n";
+ my $t = Proc::ProcessTable->new;
printf($FORMAT, "PID", "TTY", "STAT", "START", "COMMAND");
- foreach $p ( @{$t->table} ){
+ foreach my $p ( @{$t->table} ){
printf($FORMAT,
$p->pid,
$p->ttydev,
@@ -241,11 +250,11 @@
# Dump all the information in the current process table
use Proc::ProcessTable;
- $t = new Proc::ProcessTable;
+ my $t = Proc::ProcessTable->new;
- foreach $p (@{$t->table}) {
+ foreach my $p (@{$t->table}) {
print "--------------------------------\n";
- foreach $f ($t->fields){
+ foreach my $f ($t->fields){
print $f, ": ", $p->{$f}, "\n";
}
}
@@ -262,7 +271,7 @@
=head1 SEE ALSO
-Proc::ProcessTable::Process.pm, perl(1).
+L<Proc::ProcessTable::Process>, L<perl(1)>.
=cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/ProcessTable.xs
new/Proc-ProcessTable-0.55/ProcessTable.xs
--- old/Proc-ProcessTable-0.53/ProcessTable.xs 2013-12-05 22:02:09.000000000
+0100
+++ new/Proc-ProcessTable-0.55/ProcessTable.xs 2018-02-01 18:58:10.000000000
+0100
@@ -101,6 +101,8 @@
/* This gets called by OS-specific get_table */
/* format specifies what types are being passed in, in a string */
/* containing these specifiers: */
+/* A ignore this array of strings */
+/* a array of strings, delimated with NULL, next argument is len */
/* S ignore this string */
/* s string */
/* I ignore this int */
@@ -146,6 +148,27 @@
key = *fields;
switch(*format)
{
+ case 'A': /* ignore; creates an undef value for this key in the hash */
+ va_arg(args, char *);
+ va_arg(args, int);
+ hv_store(myhash, key, strlen(key), &PL_sv_undef, 0);
+ break;
+ case 'a': /* string */
+ s_val = va_arg(args, char *);
+ i_val = va_arg(args, int);
+ {
+ int len;
+ char *s;
+ AV *av = newAV();
+
+ for (s = s_val; s < (s_val + i_val); s += len + 1) {
+ len = strlen(s);
+ av_push (av, newSVpvn (s, len));
+ }
+ hv_store (myhash, key, strlen(key), newRV_noinc((SV *) av), 0);
+ }
+ break;
+
case 'S': /* ignore; creates an undef value for this key in the hash */
va_arg(args, char *);
hv_store(myhash, key, strlen(key), newSV(0), 0);
@@ -317,7 +340,7 @@
/* Check that we have an actual object.
calling Proc::Processtable->table SIGSEVs
- calling on an actual object is valid my $proc_obj = new
Proc::ProcessTable; $proc_obj->table;
+ calling on an actual object is valid my $proc_obj =
Proc::ProcessTable->new; $proc_obj->table;
*/
if (!obj || !SvOK (obj) || !SvROK (obj) || !sv_isobject (obj)) {
croak("Must call table from an initalized object created with new");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/README
new/Proc-ProcessTable-0.55/README
--- old/Proc-ProcessTable-0.53/README 2013-04-04 21:14:47.000000000 +0200
+++ new/Proc-ProcessTable-0.55/README 2017-02-21 01:03:40.000000000 +0100
@@ -55,15 +55,15 @@
With this module, you can do things like this:
- # kill memory pigs
- use Proc::ProcessTable;
+ # kill memory pigs
+ use Proc::ProcessTable;
- $t = new Proc::ProcessTable;
- foreach $p ( @{$t->table} ){
- if( $p->pctmem > 95 ){
- $p->kill(9);
- }
- }
+ my $t = Proc::ProcessTable->new;
+ foreach my $p ( @{$t->table} ) {
+ if( $p->pctmem > 95 ){
+ $p->kill(9);
+ }
+ }
There is another short example in the file "example.pl" in the
distribution. For a more elaborate example (in German), see
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/README.freebsd-kvm
new/Proc-ProcessTable-0.55/README.freebsd-kvm
--- old/Proc-ProcessTable-0.53/README.freebsd-kvm 2013-02-24
20:08:13.000000000 +0100
+++ new/Proc-ProcessTable-0.55/README.freebsd-kvm 2018-01-27
09:27:42.000000000 +0100
@@ -8,6 +8,7 @@
groups array of group ids
pgrp process GID
sess process session ID
+ jid Jail ID
flags P_* flags
sflags PS_* flags
@@ -18,6 +19,7 @@
ctime running child time (in seconds)
cutime child user time (in seconds)
cstime child system time (in seconds)
+ pctcpu percent CPU usage
wchan current system call
state state of process
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/README.openbsd
new/Proc-ProcessTable-0.55/README.openbsd
--- old/Proc-ProcessTable-0.53/README.openbsd 2012-10-21 16:15:53.000000000
+0200
+++ new/Proc-ProcessTable-0.55/README.openbsd 2018-01-27 09:27:42.000000000
+0100
@@ -12,6 +12,8 @@
utime user time
stime system time
start time process started
+size virtual memory size (bytes)
+rss resident set size (bytes)
fname command name
state state of process
ttydev path of process' tty
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/contrib/pswait
new/Proc-ProcessTable-0.55/contrib/pswait
--- old/Proc-ProcessTable-0.53/contrib/pswait 2012-10-21 16:15:53.000000000
+0200
+++ new/Proc-ProcessTable-0.55/contrib/pswait 2017-02-21 01:03:40.000000000
+0100
@@ -4,7 +4,7 @@
exit if ( $#ARGV == -1 );
$|++;
-my $ptable = new Proc::ProcessTable;
+my $ptable = Proc::ProcessTable->new;
my %waited = ();
my %proc;
$proc{ $_->pid }=$_->fname foreach (@{$ptable->table});
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/example.pl
new/Proc-ProcessTable-0.55/example.pl
--- old/Proc-ProcessTable-0.53/example.pl 2012-10-21 16:15:53.000000000
+0200
+++ new/Proc-ProcessTable-0.55/example.pl 2017-02-21 01:03:40.000000000
+0100
@@ -2,15 +2,15 @@
use Proc::ProcessTable;
-$ref = new Proc::ProcessTable;
+my $ref = Proc::ProcessTable->new;
-foreach $proc (@{$ref->table}) {
+foreach my $proc (@{$ref->table}) {
if(@ARGV) {
next unless grep {$_ == $proc->{pid}} @ARGV;
}
print "--------------------------------\n";
- foreach $field ($ref->fields){
+ foreach my $field ($ref->fields){
print $field, ": ", $proc->{$field}, "\n";
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/hints/dragonfly.pl
new/Proc-ProcessTable-0.55/hints/dragonfly.pl
--- old/Proc-ProcessTable-0.53/hints/dragonfly.pl 1970-01-01
01:00:00.000000000 +0100
+++ new/Proc-ProcessTable-0.55/hints/dragonfly.pl 2018-02-01
23:01:26.000000000 +0100
@@ -0,0 +1 @@
+symlink "os/FreeBSD.c", "OS.c" || die "Could not link os/FreeBSD.c to
os/OS.c\n";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/os/FreeBSD-kvm.c
new/Proc-ProcessTable-0.55/os/FreeBSD-kvm.c
--- old/Proc-ProcessTable-0.53/os/FreeBSD-kvm.c 2015-08-23 11:57:06.000000000
+0200
+++ new/Proc-ProcessTable-0.55/os/FreeBSD-kvm.c 2018-01-27 09:27:42.000000000
+0100
@@ -41,6 +41,7 @@
char cstime[20];
char flag[20];
char sflag[20];
+ char pctcpu[20];
static char format[128];
char cmndline[ARG_MAX];
@@ -80,9 +81,11 @@
argv = kvm_getargv(kd, (const struct kinfo_proc *) &(procs[i]) , 0);
if (argv) {
int j = 0;
- while (argv[j] && strlen(cmndline) <= ARG_MAX) {
+ while (argv[j] && strlen(cmndline)+strlen(argv[j])+1 <= ARG_MAX) {
strcat(cmndline, argv[j]);
- strcat(cmndline, " ");
+ if (argv[j+1]) {
+ strcat(cmndline, " ");
+ }
j++;
}
}
@@ -134,6 +137,24 @@
oncpu = procs[i].ki_oncpu == 0xff ? &PL_sv_undef :
newSViv(procs[i].ki_oncpu);
+ /* get the current CPU percent usage for this process */
+ /* copied from FreeBSD sources bin/ps/ps.c and friends */
+ #define fxtofl(fixpt) ((double)(fixpt) / fscale)
+ int fscale;
+ size_t oldlen;
+ fixpt_t ccpu;
+ oldlen = sizeof(ccpu);
+ if (sysctlbyname("kern.ccpu", &ccpu, &oldlen, NULL, 0) == -1)
+ ppt_croak("cannot get kern.ccpu");
+ if (sysctlbyname("kern.fscale", &fscale, &oldlen, NULL, 0) == -1)
+ ppt_croak("cannot get kern.fscale");
+ double pcpu;
+ if (procs[i].ki_swtime == 0 || (procs[i].ki_flag & P_INMEM) == 0)
+ pcpu = 0.0;
+ else
+ pcpu = (100.0 * fxtofl(procs[i].ki_pctcpu) / (1.0 -
exp(procs[i].ki_swtime * log(fxtofl(ccpu)))));
+ sprintf(pctcpu,"%.1f",pcpu);
+
bless_into_proc( format,
Fields,
@@ -157,6 +178,7 @@
ctime,
cutime,
cstime,
+ pctcpu,
procs[i].ki_wmesg,
state,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/os/FreeBSD-kvm.h
new/Proc-ProcessTable-0.55/os/FreeBSD-kvm.h
--- old/Proc-ProcessTable-0.53/os/FreeBSD-kvm.h 2015-08-23 11:57:06.000000000
+0200
+++ new/Proc-ProcessTable-0.55/os/FreeBSD-kvm.h 2018-01-27 09:27:42.000000000
+0100
@@ -13,7 +13,7 @@
/* We need to pass in a cap for ignore, lower for store on object */
/* We can just lc these! */
-static char Defaultformat[] = "iiiiiiiissssssssssssissiiiiiiiiiiiiiiVV";
+static char Defaultformat[] = "iiiiiiiisssssssssssssissiiiiiiiiiiiiiiVV";
/* Mapping of field to type */
static char* Fields[] = {
@@ -36,6 +36,7 @@
"ctime",
"cutime",
"cstime",
+ "pctcpu",
"wchan",
"state",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/os/Linux.c
new/Proc-ProcessTable-0.55/os/Linux.c
--- old/Proc-ProcessTable-0.53/os/Linux.c 2015-08-24 21:24:37.000000000
+0200
+++ new/Proc-ProcessTable-0.55/os/Linux.c 2018-02-01 20:30:36.000000000
+0100
@@ -30,10 +30,10 @@
/* some static values that won't change, */
static pthread_once_t globals_init = PTHREAD_ONCE_INIT;
-static long long boot_time;
-static unsigned page_size;
-static unsigned long long system_memory;
-static unsigned system_hertz;
+static long long boot_time;
+static unsigned page_size;
+static unsigned long long system_memory;
+static unsigned system_hertz;
static bool init_failed = false;
@@ -66,7 +66,7 @@
boot_time = -1;
system_memory = -1;
- page_size = getpagesize();
+ page_size = getpagesize();
/* initilize our mem stack, tempoary memory */
obstack_init(&mem_pool);
@@ -433,12 +433,40 @@
field_enable(format_str, F_CMNDLINE);
}
+static void get_proc_cmdline(char *pid, char *format_str, struct procstat* prs,
+ struct obstack *mem_pool)
+{
+ char *cmdline_text, *cur;
+ off_t cmdline_off;
+
+ if ((cmdline_text = read_file(pid, "cmdline", &cmdline_off, mem_pool)) ==
NULL)
+ return;
+
+ prs->cmdline = cmdline_text;
+ prs->cmdline_len = cmdline_off;
+ field_enable(format_str, F_CMDLINE);
+}
+
+static void get_proc_environ(char *pid, char *format_str, struct procstat* prs,
+ struct obstack *mem_pool)
+{
+ char *environ_text, *cur;
+ off_t environ_off;
+
+ if ((environ_text = read_file(pid, "environ", &environ_off, mem_pool)) ==
NULL)
+ return;
+
+ prs->environ = environ_text;
+ prs->environ_len = environ_off;
+ field_enable(format_str, F_ENVIRON);
+}
+
static void get_proc_status(char *pid, char *format_str, struct procstat* prs,
struct obstack *mem_pool)
{
char *status_text, *loc;
off_t status_len;
- int dummy_i;
+ int dummy_i;
if ((status_text = read_file(pid, "status", &status_len, mem_pool)) ==
NULL)
return;
@@ -464,10 +492,13 @@
} else if (strncmp(loc, "Gid:", 4) == 0) {
sscanf(loc + 4, " %d %d %d %d", &dummy_i, &prs->egid, &prs->sgid,
&prs->fgid);
field_enable_range(format_str, F_EGID, F_FGID);
+ } else if (strncmp(loc, "TracerPid:", 10) == 0) {
+ sscanf(loc + 10, " %d", &prs->tracer);
+ field_enable(format_str, F_TRACER);
}
/* short circuit condition */
- if (islower(format_str[F_EUID]) && islower(format_str[F_EGID]))
+ if (islower(format_str[F_EUID]) && islower(format_str[F_EGID]) &&
islower(format_str[F_TRACER]))
goto done;
}
@@ -520,6 +551,9 @@
case 't':
prs->state = get_string(TRACINGSTOP);
break;
+ case 'P':
+ prs->state = get_string(PARKED);
+ break;
/* unknown state, state is already set to NULL */
default:
ppt_warn("Ran into unknown state (hex char: %x)", (int)
prs->state_c);
@@ -539,14 +573,14 @@
prs->cstime = JIFFIES_TO_MICROSECONDS(prs->cstime);
prs->cutime = JIFFIES_TO_MICROSECONDS(prs->cutime);
- /* derived time values */
- prs->time = prs->utime + prs->stime;
- prs->ctime = prs->cutime + prs->cstime;
+ /* derived time values */
+ prs->time = prs->utime + prs->stime;
+ prs->ctime = prs->cutime + prs->cstime;
- field_enable_range(format_str, F_TIME, F_CTIME);
+ field_enable_range(format_str, F_TIME, F_CTIME);
- /* fix rss to be in bytes (returned from kernel in pages) */
- prs->rss *= page_size;
+ /* fix rss to be in bytes (returned from kernel in pages) */
+ prs->rss *= page_size;
}
/* calc_prec()
@@ -661,8 +695,14 @@
/* correct values (times) found in /proc/${pid}/stat */
fixup_stat_values(format_str, prs);
- /* get process' cmndline */
- get_proc_cmndline(dir_result->d_name, format_str, prs,
&mem_pool);
+ /* get process' cmndline */
+ get_proc_cmndline(dir_result->d_name, format_str, prs, &mem_pool);
+
+ /* get process' cmdline */
+ get_proc_cmdline(dir_result->d_name, format_str, prs, &mem_pool);
+
+ /* get process' environ */
+ get_proc_environ(dir_result->d_name, format_str, prs, &mem_pool);
/* get process' cwd & exec values from the symblink */
eval_link(dir_result->d_name, "cwd", F_CWD, &prs->cwd, format_str,
@@ -673,8 +713,8 @@
/* scapre from /proc/{$pid}/status */
get_proc_status(dir_result->d_name, format_str, prs, &mem_pool);
- /* calculate precent cpu & mem values */
- calc_prec(format_str, prs, &mem_pool);
+ /* calculate precent cpu & mem values */
+ calc_prec(format_str, prs, &mem_pool);
/* Go ahead and bless into a perl object */
/* Linux.h defines const char* const* Fiels, but we cast it away, as
bless_into_proc only understands char** */
@@ -701,8 +741,8 @@
prs->vsize,
prs->rss,
prs->wchan,
- prs->time,
- prs->ctime,
+ prs->time,
+ prs->ctime,
prs->state,
prs->euid,
prs->suid,
@@ -714,7 +754,12 @@
prs->pctmem,
prs->cmndline,
prs->exec,
- prs->cwd
+ prs->cwd,
+ prs->cmdline,
+ prs->cmdline_len,
+ prs->environ,
+ prs->environ_len,
+ prs->tracer
);
/* we want a new prs, for the next itteration */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/os/Linux.h
new/Proc-ProcessTable-0.55/os/Linux.h
--- old/Proc-ProcessTable-0.53/os/Linux.h 2013-12-05 21:47:33.000000000
+0100
+++ new/Proc-ProcessTable-0.55/os/Linux.h 2018-02-01 20:30:16.000000000
+0100
@@ -6,59 +6,65 @@
/* it also gets used by init_static_vars at the way top of the file,
* I wanted init_static_vars to be at the way top close to the global vars */
static char *read_file(const char *path, const char *extra_path, off_t *len,
- struct obstack *mem_pool);
+ struct obstack *mem_pool);
struct procstat
{
- /* user/group id of the user running it */
- int uid;
- int gid;
- /* values scraped from /proc/{$pid}/stat */
- pid_t pid;
- char comm[16];
/* limit in kernel, likewise in procps */
- char state_c;
- int ppid;
- int pgrp;
- int sid;
- int tty;
- unsigned flags;
- unsigned long minflt, cminflt, majflt, cmajflt;
- unsigned long long utime, stime;
- long long cutime, cstime;
- long priority;
- unsigned long long start_time;
- unsigned long vsize;
- long rss;
- unsigned long wchan;
- /* these are derived from above time values */
- unsigned long long time, ctime;
- /* from above state_c but fixed up elsewhere */
- const char *state;
- /* values scraped from /proc/{$pid}/status */
- int euid, suid, fuid;
- int egid, sgid, fgid;
- /* cwd, cmdline & exec files; values allocated at the end of obstacks */
- char *cwd;
- char *cmndline;
- char *exec;
- /* other values */
- char pctcpu[LENGTH_PCTCPU]; /* precent cpu, without
'%' char */
- char pctmem[sizeof("100.00")]; /* precent
memory, without '%' char */
+ /* user/group id of the user running it */
+ int uid;
+ int gid;
+ /* values scraped from /proc/{$pid}/stat */
+ pid_t pid;
+ char comm[16]; /* limit in kernel,
likewise in procps */
+ char state_c;
+ int ppid;
+ int pgrp;
+ int sid;
+ int tracer;
+ int tty;
+ unsigned flags;
+ unsigned long minflt, cminflt, majflt, cmajflt;
+ unsigned long long utime, stime;
+ long long cutime, cstime;
+ long priority;
+ unsigned long long start_time;
+ unsigned long vsize;
+ long rss;
+ unsigned long wchan;
+ /* these are derived from above time values */
+ unsigned long long time, ctime;
+ /* from above state_c but fixed up elsewhere */
+ const char *state;
+ /* values scraped from /proc/{$pid}/status */
+ int euid, suid, fuid;
+ int egid, sgid, fgid;
+ /* cwd, cmdline & exec files; values allocated at the end of obstacks */
+ char *cwd;
+ char *cmndline;
+ char *cmdline;
+ int cmdline_len;
+ char *environ;
+ int environ_len;
+ char *exec;
+ /* other values */
+ char pctcpu[LENGTH_PCTCPU]; /* precent cpu, without '%' char */
+ char pctmem[sizeof("100.00")]; /* precent memory, without '%'
char */
};
enum state
{
- SLEEP,
- WAIT,
- RUN,
- IDLE,
- DEFUNCT,
- STOP,
- UWAIT,
+ SLEEP,
+ WAIT,
+ RUN,
+ IDLE,
+ DEFUNCT,
+ STOP,
+ UWAIT,
DEAD,
WAKEKILL,
- TRACINGSTOP
+ TRACINGSTOP,
+ PARKED
};
@@ -67,250 +73,264 @@
static const char strings[] =
{
/* process state */
- "sleep\0"
- "wait\0"
- "run\0"
- "idle\0"
- "defunct\0"
+ "sleep\0"
+ "wait\0"
+ "run\0"
+ "idle\0"
+ "defunct\0"
"stop\0"
"uwait\0"
"dead\0"
"wakekill\0"
"tracingstop\0"
/* error messages */
- "/proc unavailable\0"
- "intilization failed\0"
+ "/proc unavailable\0"
+ "intilization failed\0"
/* fields */
- "uid\0"
- "gid\0"
- "pid\0"
- "fname\0"
- "ppid\0"
- "pgrp\0"
- "sess\0"
- "ttynum\0"
- "flags\0"
- "minflt\0"
- "cminflt\0"
- "majflt\0"
- "cmajflt\0"
- "utime\0"
- "stime\0"
- "cutime\0"
- "cstime\0"
- "priority\0"
- "start\0"
- "size\0"
- "rss\0"
- "wchan\0"
- "time\0"
- "ctime\0"
- "state\0"
- "euid\0"
- "suid\0"
- "fuid\0"
- "egid\0"
- "sgid\0"
- "fgid\0"
- "pctcpu\0"
- "pctmem\0"
- "cmndline\0"
- "exec\0"
- "cwd\0"
+ "uid\0"
+ "gid\0"
+ "pid\0"
+ "fname\0"
+ "ppid\0"
+ "pgrp\0"
+ "sess\0"
+ "ttynum\0"
+ "flags\0"
+ "minflt\0"
+ "cminflt\0"
+ "majflt\0"
+ "cmajflt\0"
+ "utime\0"
+ "stime\0"
+ "cutime\0"
+ "cstime\0"
+ "priority\0"
+ "start\0"
+ "size\0"
+ "rss\0"
+ "wchan\0"
+ "time\0"
+ "ctime\0"
+ "state\0"
+ "euid\0"
+ "suid\0"
+ "fuid\0"
+ "egid\0"
+ "sgid\0"
+ "fgid\0"
+ "pctcpu\0"
+ "pctmem\0"
+ "cmndline\0"
+ "exec\0"
+ "cwd\0"
+ "cmdline\0"
+ "environ\0"
+ "tracer\0"
/* format string */
- "IIISIIIILLLLLJJJJIJPLLJJSIIIIIISSSSS\0"
+ "IIISIIIILLLLLJJJJIJPLLJJSIIIIIISSSSSAAI\0"
};
-
-static const size_t strings_index[] =
-{
/* I generated this array with a perl script processing the above char array,
- * and then performed cross string optimization (by hand) for:
- * pid, time, uid, gid, minflt, majflt,
+ * and then performed cross string optimization (by hand) for:
+ * pid, time, uid, gid, minflt, majflt,
*/
-/* process status strings */
- 0,
- 6,
- 11,
- 15,
- 20,
- 28,
- 33,
- 39,
- 44,
- 53,
-/* error messages */
- 65,
- 83,
-/* fields */
- 103,
- 107,
- 111,
- 115,
- 121,
- 126,
- 131,
- 136,
- 143,
- 149,
- 156,
- 164,
- 171,
- 179,
- 185,
- 191,
- 198,
- 205,
- 214,
- 220,
- 225,
- 229,
- 235,
- 240,
- 246,
- 252,
- 257,
- 262,
- 267,
- 272,
- 277,
- 282,
- 289,
- 296,
- 305,
- 310,
-/* default format string (pre lower casing) */
- 314,
+static const size_t strings_index[] =
+{
+ /* process status strings */
+ 0,
+ 6,
+ 11,
+ 15,
+ 20,
+ 28,
+ 33,
+ 39,
+ 44,
+ 53,
+ /* error messages */
+ 65,
+ 83,
+ /* fields */
+ 103,
+ 107,
+ 111,
+ 115,
+ 121,
+ 126,
+ 131,
+ 136,
+ 143,
+ 149,
+ 156,
+ 164,
+ 171,
+ 179,
+ 185,
+ 191,
+ 198,
+ 205,
+ 214,
+ 220,
+ 225,
+ 229,
+ 235,
+ 240,
+ 246,
+ 252,
+ 257,
+ 262,
+ 267,
+ 272,
+ 277,
+ 282,
+ 289,
+ 296,
+ 305,
+ 310,
+ 314,
+ 322,
+ 330,
+ /* default format string (pre lower casing) */
+ 337
};
enum string_name {
- /* NOTE: we start this enum at 10, so we can use still keep using the
- * state enum, and have those correspond to the static strings */
+ /* NOTE: we start this enum at 10, so we can use still keep using the
+ * state enum, and have those correspond to the static strings */
/* error messages */
- STR_ERR_PROC_STATFS = 10,
- STR_ERR_INIT,
+ STR_ERR_PROC_STATFS = 10,
+ STR_ERR_INIT,
/* fields */
- STR_FIELD_UID,
- STR_FIELD_GID,
- STR_FIELD_PID,
- STR_FIELD_FNAME,
- STR_FIELD_PPID,
- STR_FIELD_PGRP,
- STR_FIELD_SESS,
- STR_FIELD_TTYNUM,
- STR_FIELD_FLAGS,
- STR_FIELD_MINFLT,
- STR_FIELD_CMINFLT,
- STR_FIELD_MAJFLT,
- STR_FIELD_CMAJFLT,
- STR_FIELD_UTIME,
- STR_FIELD_STIME,
- STR_FIELD_CUTIME,
- STR_FIELD_CSTIME,
- STR_FIELD_PRIORITY,
- STR_FIELD_START,
- STR_FIELD_SIZE,
- STR_FIELD_RSS,
- STR_FIELD_WCHAN,
- STR_FIELD_TIME,
- STR_FIELD_CTIME,
- STR_FIELD_STATE,
- STR_FIELD_EUID,
- STR_FIELD_SUID,
- STR_FIELD_FUID,
- STR_FIELD_EGID,
- STR_FIELD_SGID,
- STR_FIELD_FGID,
- STR_FIELD_PCTCPU,
- STR_FIELD_PCTMEM,
- STR_FIELD_CMNDLINE,
- STR_FIELD_EXEC,
- STR_FIELD_CWD,
+ STR_FIELD_UID,
+ STR_FIELD_GID,
+ STR_FIELD_PID,
+ STR_FIELD_FNAME,
+ STR_FIELD_PPID,
+ STR_FIELD_PGRP,
+ STR_FIELD_SESS,
+ STR_FIELD_TTYNUM,
+ STR_FIELD_FLAGS,
+ STR_FIELD_MINFLT,
+ STR_FIELD_CMINFLT,
+ STR_FIELD_MAJFLT,
+ STR_FIELD_CMAJFLT,
+ STR_FIELD_UTIME,
+ STR_FIELD_STIME,
+ STR_FIELD_CUTIME,
+ STR_FIELD_CSTIME,
+ STR_FIELD_PRIORITY,
+ STR_FIELD_START,
+ STR_FIELD_SIZE,
+ STR_FIELD_RSS,
+ STR_FIELD_WCHAN,
+ STR_FIELD_TIME,
+ STR_FIELD_CTIME,
+ STR_FIELD_STATE,
+ STR_FIELD_EUID,
+ STR_FIELD_SUID,
+ STR_FIELD_FUID,
+ STR_FIELD_EGID,
+ STR_FIELD_SGID,
+ STR_FIELD_FGID,
+ STR_FIELD_PCTCPU,
+ STR_FIELD_PCTMEM,
+ STR_FIELD_CMNDLINE,
+ STR_FIELD_EXEC,
+ STR_FIELD_CWD,
+ STR_FIELD_CMDLINE,
+ STR_FIELD_ENIVORN,
+ STR_FIELD_TRACER,
/* format string */
- STR_DEFAULT_FORMAT
+ STR_DEFAULT_FORMAT
};
enum field
{
- F_UID,
- F_GID,
- F_PID,
- F_FNAME,
- F_PPID,
- F_PGRP,
- F_SESS,
- F_TTYNUM,
- F_FLAGS,
- F_MINFLT,
- F_CMINFLT,
- F_MAJFLT,
- F_CMAJFLT,
- F_UTIME,
- F_STIME,
- F_CUTIME,
- F_CSTIME,
- F_PRIORITY,
- F_START,
- F_SIZE,
- F_RSS,
- F_WCHAN,
- F_TIME,
- F_CTIME,
- F_STATE,
- F_EUID,
- F_SUID,
- F_FUID,
- F_EGID,
- F_SGID,
- F_FGID,
- F_PCTCPU,
- F_PCTMEM,
- F_CMNDLINE,
- F_EXEC,
- F_CWD
+ F_UID,
+ F_GID,
+ F_PID,
+ F_FNAME,
+ F_PPID,
+ F_PGRP,
+ F_SESS,
+ F_TTYNUM,
+ F_FLAGS,
+ F_MINFLT,
+ F_CMINFLT,
+ F_MAJFLT,
+ F_CMAJFLT,
+ F_UTIME,
+ F_STIME,
+ F_CUTIME,
+ F_CSTIME,
+ F_PRIORITY,
+ F_START,
+ F_SIZE,
+ F_RSS,
+ F_WCHAN,
+ F_TIME,
+ F_CTIME,
+ F_STATE,
+ F_EUID,
+ F_SUID,
+ F_FUID,
+ F_EGID,
+ F_SGID,
+ F_FGID,
+ F_PCTCPU,
+ F_PCTMEM,
+ F_CMNDLINE,
+ F_EXEC,
+ F_CWD,
+ F_CMDLINE,
+ F_ENVIRON,
+ F_TRACER
};
static const char* const field_names[] =
{
- strings + 103,
- strings + 107,
- strings + 111,
- strings + 115,
- strings + 121,
- strings + 126,
- strings + 131,
- strings + 136,
- strings + 143,
- strings + 149,
- strings + 156,
- strings + 164,
- strings + 171,
- strings + 179,
- strings + 185,
- strings + 191,
- strings + 198,
- strings + 205,
- strings + 214,
- strings + 220,
- strings + 225,
- strings + 229,
- strings + 235,
- strings + 240,
- strings + 246,
- strings + 252,
- strings + 257,
- strings + 262,
- strings + 267,
- strings + 272,
- strings + 277,
- strings + 282,
- strings + 289,
- strings + 296,
- strings + 305,
- strings + 310,
+ strings + 103,
+ strings + 107,
+ strings + 111,
+ strings + 115,
+ strings + 121,
+ strings + 126,
+ strings + 131,
+ strings + 136,
+ strings + 143,
+ strings + 149,
+ strings + 156,
+ strings + 164,
+ strings + 171,
+ strings + 179,
+ strings + 185,
+ strings + 191,
+ strings + 198,
+ strings + 205,
+ strings + 214,
+ strings + 220,
+ strings + 225,
+ strings + 229,
+ strings + 235,
+ strings + 240,
+ strings + 246,
+ strings + 252,
+ strings + 257,
+ strings + 262,
+ strings + 267,
+ strings + 272,
+ strings + 277,
+ strings + 282,
+ strings + 289,
+ strings + 296,
+ strings + 305,
+ strings + 310,
+ strings + 314,
+ strings + 322,
+ strings + 330
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/os/OpenBSD.c
new/Proc-ProcessTable-0.55/os/OpenBSD.c
--- old/Proc-ProcessTable-0.53/os/OpenBSD.c 2013-02-19 00:46:02.000000000
+0100
+++ new/Proc-ProcessTable-0.55/os/OpenBSD.c 2018-01-27 09:27:42.000000000
+0100
@@ -24,11 +24,13 @@
#include <time.h>
#include <unistd.h>
+void ppt_croak(const char *pat, ...);
+
/* No need for the procstat structure since we don't use /proc */
/* We need to pass in a cap for ignore, lower for store on object */
/* We can just lc these! */
-static char Defaultformat[] = "liiiiiiiiiiiissss";
+static char Defaultformat[] = "liiiiiiiiiiiillssss";
/* Mapping of field to type */
static char* Fields[] = {
@@ -45,12 +47,14 @@
"utime",
"stime",
"start",
+ "size",
+ "rss",
"fname",
"state",
"ttydev",
"cmndline"
};
-#define F_LASTFIELD 16
+#define F_LASTFIELD 18
/* Set up simple bounds checking */
#define STRLCPY(num,targ,src) if (strlcpy(targ,src,sizeof(targ)) >=
sizeof(targ)) \
@@ -73,6 +77,8 @@
int i, argcount;
int ttynum;
long start;
+ unsigned long vsize;
+ unsigned long rss;
char *ttydev;
char cmndline[ARG_MAX+1];
char **pargv;
@@ -123,14 +129,19 @@
break;
}
+ vsize = getpagesize() * (procs[i].p_vm_dsize +
procs[i].p_vm_ssize + procs[i].p_vm_tsize);
+ rss = getpagesize() * procs[i].p_vm_rssize;
+
/* arguments */
cmndline[0] = '\0';
pargv = kvm_getargv(kd, (const struct kinfo_proc *)
&(procs[i]), 0);
if (pargv) {
argcount = 0;
- while (pargv[argcount] && strlen(cmndline) <= ARG_MAX) {
+ while (pargv[argcount] &&
strlen(cmndline)+strlen(pargv[argcount])+1 <= ARG_MAX) {
STRLCAT(1,cmndline,pargv[argcount]);
- STRLCAT(2,cmndline," ");
+ if (pargv[argcount+1]) {
+ STRLCAT(2,cmndline," ");
+ }
argcount++;
}
}
@@ -151,6 +162,8 @@
procs[i].p_uutime_sec,
procs[i].p_ustime_sec,
procs[i].p_ustart_sec,
+ vsize,
+ rss,
procs[i].p_comm,
state,
ttydev,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/os/aix.c
new/Proc-ProcessTable-0.55/os/aix.c
--- old/Proc-ProcessTable-0.53/os/aix.c 2012-10-21 16:15:53.000000000 +0200
+++ new/Proc-ProcessTable-0.55/os/aix.c 2017-02-21 01:03:40.000000000 +0100
@@ -107,7 +107,7 @@
format[F_STAT] = 'S';
}
-
+ // http://www.thp.uni-due.de/pstree/pstree.c
if ( state == ZOMBIE
|| getuser(&pr_buff[i], sizeof(struct procinfo),
&uinfo, sizeof(struct userinfo) ) < 0 ) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/os/bsdi.c
new/Proc-ProcessTable-0.55/os/bsdi.c
--- old/Proc-ProcessTable-0.53/os/bsdi.c 2015-08-23 11:57:06.000000000
+0200
+++ new/Proc-ProcessTable-0.55/os/bsdi.c 2017-02-21 01:03:40.000000000
+0100
@@ -153,9 +153,11 @@
argv = kvm_getargv(kd, (const struct kinfo_proc *) &(procs[i]) , 0);
if (argv) {
int j = 0;
- while (argv[j] && strlen(cmndline) <= MAXARGLN) {
+ while (argv[j] && strlen(cmndline)+strlen(argv[j])+1 <= MAXARGLN) {
strcat(cmndline, argv[j]);
- strcat(cmndline, " ");
+ if (argv[j+1]) {
+ strcat(cmndline, " ");
+ }
j++;
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Proc-ProcessTable-0.53/t/process.t
new/Proc-ProcessTable-0.55/t/process.t
--- old/Proc-ProcessTable-0.53/t/process.t 2012-10-21 16:15:53.000000000
+0200
+++ new/Proc-ProcessTable-0.55/t/process.t 2017-02-21 01:03:40.000000000
+0100
@@ -13,7 +13,7 @@
$SIG{CHLD} = sub{wait;};
my ( $got, $field );
-my $t = new Proc::ProcessTable;
+my $t = Proc::ProcessTable->new;
# Is there a process called cron
foreach $got ( @{$t->table} )