This commit is contained in:
		
							parent
							
								
									27aa0532c5
								
							
						
					
					
						commit
						696f62a637
					
				@ -1,2 +0,0 @@
 | 
			
		||||
this directory contains some experiments that are not in the codebase yet.
 | 
			
		||||
may or may not move forward, but would prefer not to loose these stuffs.
 | 
			
		||||
							
								
								
									
										21
									
								
								exp/argv.pl
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								exp/argv.pl
									
									
									
									
									
								
							@ -1,21 +0,0 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
#generate a process with large argv for proc_args testing
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
if (@ARGV) {
 | 
			
		||||
    print "pid=$$\n";
 | 
			
		||||
    <STDIN>;
 | 
			
		||||
}
 | 
			
		||||
else {
 | 
			
		||||
    my(@argv);
 | 
			
		||||
    my $nargs = 26;
 | 
			
		||||
    my $arglen = 4256;
 | 
			
		||||
    my $arg = 'a';
 | 
			
		||||
    for (my $i=0; $i<$nargs; $i++) {
 | 
			
		||||
	push @argv, $arg++ x $arglen;
 | 
			
		||||
    }
 | 
			
		||||
    print "$^X $0\n";
 | 
			
		||||
    exec $^X, $0, @argv or die $!;
 | 
			
		||||
} 
 | 
			
		||||
@ -1,24 +0,0 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <kstat.h>
 | 
			
		||||
 | 
			
		||||
/* gcc -lkstat -o dump_kstats dump_kstats.c */
 | 
			
		||||
 | 
			
		||||
static const char *kstat_type_names[] = {
 | 
			
		||||
    "raw", "named", "intr", "io", "timer"
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv) {
 | 
			
		||||
    kstat_ctl_t *kc = kstat_open();
 | 
			
		||||
    kstat_t *kp;
 | 
			
		||||
 | 
			
		||||
    for (kp = kc->kc_chain; kp != 0; kp = kp->ks_next) {
 | 
			
		||||
        if (strncmp(kp->ks_name, "kstat_", 6) == 0) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        fprintf(stdout, "%-5s %s::%s.%s[%d]\n",
 | 
			
		||||
                kstat_type_names[kp->ks_type],
 | 
			
		||||
                kp->ks_class, kp->ks_module, kp->ks_name, kp->ks_instance);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    kstat_close(kc);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								exp/fork.pl
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								exp/fork.pl
									
									
									
									
									
								
							@ -1,27 +0,0 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
#create processes to benchmark ptql stuff
 | 
			
		||||
 | 
			
		||||
my $num = shift || 10;
 | 
			
		||||
my @kids;
 | 
			
		||||
my $pid;
 | 
			
		||||
 | 
			
		||||
for (my $i=0; $i<$num; $i++) {
 | 
			
		||||
    if (!defined($pid = fork())) {
 | 
			
		||||
	die "cannot fork: $!";
 | 
			
		||||
    }
 | 
			
		||||
    elsif ($pid) {
 | 
			
		||||
	#parent
 | 
			
		||||
	push @kids, $pid;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
	#child
 | 
			
		||||
	sleep 10 while 1;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
for $pid (@kids) {
 | 
			
		||||
    waitpid($pid, 0);
 | 
			
		||||
}
 | 
			
		||||
@ -1,37 +0,0 @@
 | 
			
		||||
#common cpu model names
 | 
			
		||||
#linux /proc/cpuinfo model name
 | 
			
		||||
#win32 HKLM/HARDWARE/DESCRIPTION/System/CentralProcessor/0/ProcessorNameString
 | 
			
		||||
 | 
			
		||||
Intel(R) Xeon(TM) CPU 2.40GHz
 | 
			
		||||
Pentium III (Cascades)
 | 
			
		||||
Celeron (Mendocino)
 | 
			
		||||
Pentium III (Coppermine)
 | 
			
		||||
Pentium 75 - 200
 | 
			
		||||
AMD-K6(tm)-III Processor
 | 
			
		||||
AMD Opteron(tm) Processor 246
 | 
			
		||||
Opteron MP w/ 1MB
 | 
			
		||||
Intel(R) XEON(TM) CPU 1.80GHz
 | 
			
		||||
Pentium II (Deschutes)
 | 
			
		||||
Intel(R) Pentium(R) 4 CPU 1.80GHz
 | 
			
		||||
AMD-K6(tm) 3D+ Processor
 | 
			
		||||
AMD Athlon(tm) processor
 | 
			
		||||
AMD Athlon(tm) XP 1900+
 | 
			
		||||
Intel(R) Celeron(R) CPU 1.70GHz
 | 
			
		||||
AMD Athlon(TM) XP 2400+
 | 
			
		||||
AMD Athlon (TM)
 | 
			
		||||
Pentium Pro
 | 
			
		||||
Pentium III (Katmai)
 | 
			
		||||
mobile AMD Athlon(tm) 4 Processor
 | 
			
		||||
AMD Duron(tm) Processor
 | 
			
		||||
AMD Athlon(TM) XP1700+
 | 
			
		||||
Pentium II (Klamath)
 | 
			
		||||
Pentium III (Katmai)
 | 
			
		||||
AMD Athlon(tm) MP Processor 1800+
 | 
			
		||||
Pentium MMX
 | 
			
		||||
Intel(R) Pentium(R) 4 Mobile CPU 1.60GHz
 | 
			
		||||
Intel(R) Celeron(TM) CPU                1200MHz
 | 
			
		||||
Intel(R) Pentium(R) III CPU family 1400MHz
 | 
			
		||||
Mobile Intel(R) Pentium(R) 4 - M CPU 2.00GHz
 | 
			
		||||
Intel(R) Celeron(R) CPU 2.30GHz
 | 
			
		||||
Intel(R) Pentium(R) M processor 1500MHz
 | 
			
		||||
Intel(R) Xeon(TM) MP CPU 2.80GHz
 | 
			
		||||
							
								
								
									
										26
									
								
								exp/lspv.pl
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								exp/lspv.pl
									
									
									
									
									
								
							@ -1,26 +0,0 @@
 | 
			
		||||
#!/usr/bin/perl
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
my $lspv = "/usr/sbin/lspv";
 | 
			
		||||
 | 
			
		||||
open LSPV, "$lspv|" or die;
 | 
			
		||||
my(@lspv) = <LSPV>;
 | 
			
		||||
close LSPV;
 | 
			
		||||
 | 
			
		||||
my $dlm = ("-" x 25) . "\n";
 | 
			
		||||
 | 
			
		||||
print "$lspv\n", @lspv;
 | 
			
		||||
print $dlm;
 | 
			
		||||
 | 
			
		||||
for my $line (@lspv) {
 | 
			
		||||
    my $disk = (split /\s+/, $line)[0];
 | 
			
		||||
    next unless $disk;
 | 
			
		||||
    next if $line =~ / None/;
 | 
			
		||||
    my $cmd = "$lspv -l $disk";
 | 
			
		||||
    open LSPV, "$cmd|" or die;
 | 
			
		||||
    my(@pv) = <LSPV>;
 | 
			
		||||
    close LSPV;
 | 
			
		||||
    print "$cmd\n", @pv;
 | 
			
		||||
    print $dlm;
 | 
			
		||||
}
 | 
			
		||||
@ -1,31 +0,0 @@
 | 
			
		||||
#!perl
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
my $match = $ARGV[0];
 | 
			
		||||
 | 
			
		||||
my $proc = $ENV{PROC_FS} || "/proc";
 | 
			
		||||
opendir DH, $proc or die;
 | 
			
		||||
chdir $proc;
 | 
			
		||||
local $/;
 | 
			
		||||
 | 
			
		||||
while (my $pid = readdir DH) {
 | 
			
		||||
    next unless $pid =~ /^\d+$/;
 | 
			
		||||
    open FH, "$pid/cmdline" or next;
 | 
			
		||||
    my(@cmdline) = split /\000/, <FH>;
 | 
			
		||||
    close FH;
 | 
			
		||||
    if ($match) {
 | 
			
		||||
	next unless grep { /$match/o } @cmdline;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    print "-------------------------------\n";
 | 
			
		||||
 | 
			
		||||
    my $i=0;
 | 
			
		||||
    print "pid=$pid\n";
 | 
			
		||||
    for my $arg (@cmdline) {
 | 
			
		||||
	print "$i='$arg'\n";
 | 
			
		||||
	$i++;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
closedir DH;
 | 
			
		||||
@ -1,21 +0,0 @@
 | 
			
		||||
#!perl
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
#examine specific field from /proc/*/stat
 | 
			
		||||
my $field = shift;
 | 
			
		||||
 | 
			
		||||
my $proc = $ENV{PROC_FS} || "/proc";
 | 
			
		||||
opendir DH, $proc or die;
 | 
			
		||||
chdir $proc;
 | 
			
		||||
local $/;
 | 
			
		||||
 | 
			
		||||
while (my $pid = readdir DH) {
 | 
			
		||||
    next unless $pid =~ /^\d+$/;
 | 
			
		||||
    open FH, "$pid/stat" or next;
 | 
			
		||||
    my $data = <FH>;
 | 
			
		||||
    close FH;
 | 
			
		||||
    my(@fields) = split /\s+/, $data;
 | 
			
		||||
    print "$pid $fields[1] -> $fields[$field]\n";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
closedir DH;
 | 
			
		||||
							
								
								
									
										57
									
								
								exp/ptql.c
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								exp/ptql.c
									
									
									
									
									
								
							@ -1,57 +0,0 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include "sigar.h"
 | 
			
		||||
#include "sigar_ptql.h"
 | 
			
		||||
 | 
			
		||||
int ptql_test(sigar_t *sigar, char *ptql) {
 | 
			
		||||
    int status, i;
 | 
			
		||||
    sigar_proc_list_t proclist;
 | 
			
		||||
    sigar_ptql_query_t *query;
 | 
			
		||||
    sigar_ptql_error_t error;
 | 
			
		||||
 | 
			
		||||
    status =
 | 
			
		||||
        sigar_proc_list_get(sigar, &proclist);
 | 
			
		||||
 | 
			
		||||
    if (status != SIGAR_OK) {
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    status =
 | 
			
		||||
        sigar_ptql_query_create(&query, ptql, &error);
 | 
			
		||||
 | 
			
		||||
    if (status != SIGAR_OK) {
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (i=0; i<proclist.number; i++) {
 | 
			
		||||
        sigar_pid_t pid = proclist.data[i];
 | 
			
		||||
        if (sigar_ptql_query_match(sigar, query, pid) == SIGAR_OK) {
 | 
			
		||||
            sigar_proc_state_t state;
 | 
			
		||||
            sigar_proc_state_get(sigar, pid, &state);
 | 
			
		||||
            printf("name=%s, pid=%d\n", state.name, (int)pid);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sigar_proc_list_destroy(sigar, &proclist);
 | 
			
		||||
 | 
			
		||||
    sigar_ptql_query_destroy(query);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    int i;
 | 
			
		||||
    sigar_t *sigar;
 | 
			
		||||
 | 
			
		||||
    if (sigar_open(&sigar) != SIGAR_OK) {
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for (i=0; i<argc; i++) {
 | 
			
		||||
        ptql_test(sigar, argv[i]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sigar_close(sigar);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@ -1,50 +0,0 @@
 | 
			
		||||
#include <sigar.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
/*
 | 
			
		||||
gcc -g -o sigar_proc_args -lsocket \
 | 
			
		||||
-L ../bindings/java/sigar-bin/lib -lsigar-sparc-sun-solaris-2.x \
 | 
			
		||||
-I ../include sigar_proc_args.c
 | 
			
		||||
*/ 
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    sigar_t *sigar;
 | 
			
		||||
    sigar_proc_list_t procs;
 | 
			
		||||
    sigar_proc_args_t args;
 | 
			
		||||
    int n;
 | 
			
		||||
 | 
			
		||||
    if (sigar_open(&sigar) != SIGAR_OK) {
 | 
			
		||||
        fprintf(stderr, "Error opening sigar!\n");
 | 
			
		||||
        return -1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sigar_proc_list_get(sigar, &procs);
 | 
			
		||||
 | 
			
		||||
    for (n=0; n<procs.number; n++) {
 | 
			
		||||
        pid_t pid = procs.data[n];
 | 
			
		||||
        int status = 
 | 
			
		||||
            sigar_proc_args_get(sigar, pid, &args);
 | 
			
		||||
 | 
			
		||||
        printf("-------------------------------\n");
 | 
			
		||||
 | 
			
		||||
        if (status == SIGAR_OK) {
 | 
			
		||||
            int i;
 | 
			
		||||
 | 
			
		||||
            printf("pid=%d\n", pid);
 | 
			
		||||
 | 
			
		||||
            for (i=0; i<args.number; i++) {
 | 
			
		||||
                printf("%d='%s'\n", i, args.data[i]);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            sigar_proc_args_destroy(sigar, &args);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            printf("pid=%d error=%d...%s\n",
 | 
			
		||||
                   pid, status, sigar_strerror(sigar, status));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sigar_proc_list_destroy(sigar, &procs);
 | 
			
		||||
    sigar_close(sigar);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										83
									
								
								exp/sizeof.c
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								exp/sizeof.c
									
									
									
									
									
								
							@ -1,83 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
#!perl -l
 | 
			
		||||
use Config;
 | 
			
		||||
my $prg = "$0.out";
 | 
			
		||||
my $cmd = "gcc -Wall -D$^O -o $prg $0; ./$prg; rm $prg";
 | 
			
		||||
print $cmd; system $cmd;
 | 
			
		||||
__END__
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    const char *name;
 | 
			
		||||
    unsigned int size;
 | 
			
		||||
} sizeof_info_t;
 | 
			
		||||
 | 
			
		||||
#define SIZEOF_INFO(v) \
 | 
			
		||||
    {#v, sizeof(v)}
 | 
			
		||||
 | 
			
		||||
#ifdef solaris
 | 
			
		||||
 | 
			
		||||
#include <sys/kstat.h>
 | 
			
		||||
#include <sys/sysinfo.h>
 | 
			
		||||
#include <procfs.h>
 | 
			
		||||
#include <sys/proc.h>
 | 
			
		||||
#include <sys/user.h>
 | 
			
		||||
 | 
			
		||||
static sizeof_info_t sizeof_info[] = {
 | 
			
		||||
    /* kstat */
 | 
			
		||||
    SIZEOF_INFO(kstat_named_t),
 | 
			
		||||
    SIZEOF_INFO(vminfo_t),
 | 
			
		||||
    SIZEOF_INFO(cpu_stat_t),
 | 
			
		||||
    SIZEOF_INFO(cpu_vminfo_t),
 | 
			
		||||
    SIZEOF_INFO(cpu_sys_stats_t),
 | 
			
		||||
    SIZEOF_INFO(kstat_io_t),
 | 
			
		||||
    /* procfs */
 | 
			
		||||
    SIZEOF_INFO(psinfo_t),
 | 
			
		||||
    SIZEOF_INFO(prusage_t),
 | 
			
		||||
    SIZEOF_INFO(prcred_t),
 | 
			
		||||
    SIZEOF_INFO(pstatus_t),
 | 
			
		||||
    SIZEOF_INFO(struct proc),
 | 
			
		||||
    SIZEOF_INFO(struct user),
 | 
			
		||||
    {NULL, 0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef hpux
 | 
			
		||||
 | 
			
		||||
#include <sys/pstat.h>
 | 
			
		||||
#include <mntent.h>
 | 
			
		||||
#include <sys/vfs.h>
 | 
			
		||||
#include <sys/mib.h>
 | 
			
		||||
 | 
			
		||||
static sizeof_info_t sizeof_info[] = {
 | 
			
		||||
    SIZEOF_INFO(struct pst_static),
 | 
			
		||||
    SIZEOF_INFO(struct pst_status),
 | 
			
		||||
    SIZEOF_INFO(struct pst_dynamic),
 | 
			
		||||
    SIZEOF_INFO(struct pst_swapinfo),
 | 
			
		||||
    SIZEOF_INFO(struct mntent),
 | 
			
		||||
    SIZEOF_INFO(struct statfs),
 | 
			
		||||
    SIZEOF_INFO(struct nmparms),
 | 
			
		||||
    SIZEOF_INFO(mib_ifEntry),
 | 
			
		||||
    SIZEOF_INFO(mib_ipRouteEnt),
 | 
			
		||||
    {NULL, 0}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void print_sizeof_info(sizeof_info_t *info)
 | 
			
		||||
{
 | 
			
		||||
    while (info->name) {
 | 
			
		||||
        printf("sizeof(%s) == %d\n", info->name, info->size);
 | 
			
		||||
        ++info;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(void) {
 | 
			
		||||
    system("uname -a");
 | 
			
		||||
    print_sizeof_info(sizeof_info);
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
@ -1,137 +0,0 @@
 | 
			
		||||
#include <dirent.h>
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <malloc.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/processor.h>
 | 
			
		||||
#include <sys/sysinfo.h>
 | 
			
		||||
#include <sys/param.h>
 | 
			
		||||
 | 
			
		||||
#include <kstat.h>
 | 
			
		||||
#include <procfs.h>
 | 
			
		||||
 | 
			
		||||
#define PROC_ERRNO ((errno == ENOENT) ? ESRCH : errno)
 | 
			
		||||
 | 
			
		||||
#define my_pread(fd, ptr, type, offset) \
 | 
			
		||||
    (pread(fd, ptr, sizeof(type), offset) == sizeof(type))
 | 
			
		||||
 | 
			
		||||
static int proc_psinfo_get(psinfo_t *psinfo, pid_t pid)
 | 
			
		||||
{
 | 
			
		||||
    int fd, retval = 0;
 | 
			
		||||
    char buffer[BUFSIZ];
 | 
			
		||||
 | 
			
		||||
    sprintf(buffer, "/proc/%d/psinfo", pid);
 | 
			
		||||
 | 
			
		||||
    if ((fd = open(buffer, O_RDONLY)) < 0) {
 | 
			
		||||
        return ESRCH;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!my_pread(fd, psinfo, psinfo_t, 0)) {
 | 
			
		||||
        retval = errno;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    close(fd);
 | 
			
		||||
 | 
			
		||||
    return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    DIR *dirp = opendir("/proc");
 | 
			
		||||
    struct dirent *ent;
 | 
			
		||||
    char *models[] = {
 | 
			
		||||
        "unknown", "32bit", "64bit"
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    while ((ent = readdir(dirp))) {
 | 
			
		||||
        pid_t pid;
 | 
			
		||||
        psinfo_t psinfo;
 | 
			
		||||
        int retval;
 | 
			
		||||
        char buffer[BUFSIZ];
 | 
			
		||||
        char *argvb[56];
 | 
			
		||||
        char **argvp = argvb;
 | 
			
		||||
 | 
			
		||||
        int n, fd;
 | 
			
		||||
        size_t nread = 0;
 | 
			
		||||
        unsigned int argv_size;
 | 
			
		||||
 | 
			
		||||
        if (!isdigit(*ent->d_name)) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        psinfo.pr_dmodel = 0;
 | 
			
		||||
        pid = strtoul(ent->d_name, NULL, 10);
 | 
			
		||||
        retval = proc_psinfo_get(&psinfo, pid);
 | 
			
		||||
        printf("---------------------------------\n");
 | 
			
		||||
        printf("pid=%d, status=%s, model=%s\n",
 | 
			
		||||
               pid, retval ? strerror(retval) : "OK",
 | 
			
		||||
               models[psinfo.pr_dmodel]);
 | 
			
		||||
 | 
			
		||||
        argv_size = sizeof(*argvp) * psinfo.pr_argc;
 | 
			
		||||
        sprintf(buffer, "/proc/%d/as", pid);
 | 
			
		||||
        printf("argc=%d, argv_size=%d\n",
 | 
			
		||||
               psinfo.pr_argc, argv_size);
 | 
			
		||||
 | 
			
		||||
        if ((fd = open(buffer, O_RDONLY)) < 0) {
 | 
			
		||||
            printf("open(%s) == %s\n",
 | 
			
		||||
                   buffer, strerror(PROC_ERRNO));
 | 
			
		||||
            if (argvp != argvb) {
 | 
			
		||||
                free(argvp);
 | 
			
		||||
            }
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (argv_size > sizeof(argvb)) {
 | 
			
		||||
            argvp = malloc(argv_size);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if ((nread = pread(fd, argvp, argv_size, psinfo.pr_argv)) <= 0) {
 | 
			
		||||
            close(fd);
 | 
			
		||||
            printf("   pread(%d, 0x%lx, %d, 0x%lx) == %d (%s)\n",
 | 
			
		||||
                   fd, (unsigned long)argvp, argv_size,
 | 
			
		||||
                   (unsigned long)psinfo.pr_argv,
 | 
			
		||||
                   nread, strerror(errno));
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (n = 0; n < psinfo.pr_argc; n++) {
 | 
			
		||||
            int alen;
 | 
			
		||||
            char *arg;
 | 
			
		||||
 | 
			
		||||
            if ((nread = pread(fd, buffer, sizeof(buffer), (off_t)argvp[n])) <= 0) {
 | 
			
		||||
                close(fd);
 | 
			
		||||
                printf("   %-2d) pread(%d, 0x%lx, %d, 0x%lx) == %d (%s)\n",
 | 
			
		||||
                       n, fd, (unsigned long)&buffer[0], sizeof(buffer),
 | 
			
		||||
                       (unsigned long)argvp[n],
 | 
			
		||||
                       nread, strerror(errno));
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            printf("   %-2d) nread=%-4d, ", n, nread);
 | 
			
		||||
            fflush(stdout);
 | 
			
		||||
            alen = strlen(buffer)+1;
 | 
			
		||||
            printf(" alen=%-4d ", alen);
 | 
			
		||||
            fflush(stdout);
 | 
			
		||||
            arg = malloc(alen);
 | 
			
		||||
            memcpy(arg, buffer, alen);
 | 
			
		||||
            printf(" {%s}\n", arg);
 | 
			
		||||
            fflush(stdout);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (argvp != argvb) {
 | 
			
		||||
            free(argvp);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        close(fd);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    closedir(dirp);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,42 +0,0 @@
 | 
			
		||||
#!perl
 | 
			
		||||
 | 
			
		||||
#create a .tar.gz of /proc/*/@proc_files
 | 
			
		||||
 | 
			
		||||
use strict;
 | 
			
		||||
 | 
			
		||||
my(@proc_files) = qw(cmdline stat statm status maps);
 | 
			
		||||
my $cpname = "copy-proc";
 | 
			
		||||
my $tmp = $ENV{TMPDIR} || "/tmp";
 | 
			
		||||
my $tmpdir = "$tmp/$cpname";
 | 
			
		||||
unless (-e $tmpdir) {
 | 
			
		||||
    mkdir $tmpdir or die "mkdir $tmpdir: $!";
 | 
			
		||||
    print "created $tmpdir\n";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
opendir DH, "/proc" or die;
 | 
			
		||||
chdir "/proc";
 | 
			
		||||
 | 
			
		||||
while (my $pid = readdir DH) {
 | 
			
		||||
    next unless $pid =~ /^\d+$/;
 | 
			
		||||
    for my $name (@proc_files) {
 | 
			
		||||
	unless (-e "$tmpdir/$pid") {
 | 
			
		||||
	    mkdir "$tmpdir/$pid";
 | 
			
		||||
	}
 | 
			
		||||
	local *SRC, *TARG;
 | 
			
		||||
	my $file = "$pid/$name";
 | 
			
		||||
	open SRC, $file or next;
 | 
			
		||||
	open TARG, ">$tmpdir/$file" or die "open $tmpdir/$file: $!";
 | 
			
		||||
	print TARG <SRC>;
 | 
			
		||||
	close TARG;
 | 
			
		||||
	close SRC;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
chdir $tmp or die "chdir $tmp: $!";
 | 
			
		||||
system "tar -cf $cpname.tar $cpname";
 | 
			
		||||
system "gzip -f $cpname.tar";
 | 
			
		||||
 | 
			
		||||
print "files saved to $tmp/$cpname.tar.gz\n";
 | 
			
		||||
print "to cleanup, run: rm -rf $tmp/$cpname\n";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,15 +0,0 @@
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <sys/utsname.h>
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv) {
 | 
			
		||||
    struct utsname name;
 | 
			
		||||
    uname(&name);
 | 
			
		||||
 | 
			
		||||
    printf("sysname....%s\n", name.sysname);
 | 
			
		||||
    printf("nodename...%s\n", name.nodename);
 | 
			
		||||
    printf("release....%s\n", name.release);
 | 
			
		||||
    printf("version....%s\n", name.version);
 | 
			
		||||
    printf("machine....%s\n", name.machine);
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										219
									
								
								src/sigar_main.c
									
									
									
									
									
								
							
							
						
						
									
										219
									
								
								src/sigar_main.c
									
									
									
									
									
								
							@ -1,219 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) [2004, 2005, 2006], Hyperic, Inc.
 | 
			
		||||
 * This file is part of SIGAR.
 | 
			
		||||
 * 
 | 
			
		||||
 * SIGAR is free software; you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms version 2 of the GNU General Public License as
 | 
			
		||||
 * published by the Free Software Foundation. This program is distributed
 | 
			
		||||
 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 | 
			
		||||
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 | 
			
		||||
 * PARTICULAR PURPOSE. See the GNU General Public License for more
 | 
			
		||||
 * details.
 | 
			
		||||
 * 
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program; if not, write to the Free Software
 | 
			
		||||
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
 | 
			
		||||
 * USA.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#define WIN32
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
#define WINDOWS_LEAN_AND_MEAN
 | 
			
		||||
#define FILESEP '\\'
 | 
			
		||||
#define LIBPRE ""
 | 
			
		||||
#include "windows.h"
 | 
			
		||||
#else
 | 
			
		||||
#define FILESEP '/'
 | 
			
		||||
#define LIBPRE "lib"
 | 
			
		||||
#include <dlfcn.h>
 | 
			
		||||
#include <strings.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include "sigar.h"
 | 
			
		||||
#include "sigar_fileinfo.h"
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
#  define LIBEXT "dll"
 | 
			
		||||
#elif defined(DARWIN)
 | 
			
		||||
#  define LIBEXT "dylib"
 | 
			
		||||
#else
 | 
			
		||||
#  define LIBEXT "so"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
    const char *name;
 | 
			
		||||
    void *func;
 | 
			
		||||
} sigar_callback_t;
 | 
			
		||||
 | 
			
		||||
struct {
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        sigar_version_t * (*func)(void);
 | 
			
		||||
    } version;
 | 
			
		||||
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t **);
 | 
			
		||||
    } open;
 | 
			
		||||
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t *);
 | 
			
		||||
    } close;
 | 
			
		||||
    
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t *, sigar_pid_t, sigar_proc_exe_t *);
 | 
			
		||||
    } proc_exe;
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t *, sigar_pid_t, sigar_proc_args_t *);
 | 
			
		||||
    } proc_args;
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t *, sigar_pid_t, sigar_proc_env_t *);
 | 
			
		||||
    } proc_env;
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t *, sigar_pid_t, sigar_proc_modules_t *);
 | 
			
		||||
    } proc_modules;
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t *, sigar_pid_t, sigar_proc_fd_t *);
 | 
			
		||||
    } proc_fd;
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t *, int, unsigned long, sigar_pid_t *);
 | 
			
		||||
    } proc_port;
 | 
			
		||||
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t *, const char *dir, sigar_dir_stat_t *);
 | 
			
		||||
    } dir_stat;
 | 
			
		||||
    struct {
 | 
			
		||||
        const char *name;
 | 
			
		||||
        int (*func)(sigar_t *, const char *dir, sigar_dir_usage_t *);
 | 
			
		||||
    } dir_usage;
 | 
			
		||||
    sigar_callback_t end;
 | 
			
		||||
} sigar_callbacks = {
 | 
			
		||||
    { "sigar_version_get", NULL },
 | 
			
		||||
    { "sigar_open", NULL },
 | 
			
		||||
    { "sigar_close", NULL },
 | 
			
		||||
    { "sigar_proc_exe_get", NULL },
 | 
			
		||||
    { "sigar_proc_args_get", NULL },
 | 
			
		||||
    { "sigar_proc_env_get", NULL },
 | 
			
		||||
    { "sigar_proc_modules_get", NULL },
 | 
			
		||||
    { "sigar_proc_fd_get", NULL },
 | 
			
		||||
    { "sigar_proc_port_get", NULL },
 | 
			
		||||
    { "sigar_dir_stat_get", NULL },
 | 
			
		||||
    { "sigar_dir_usage_get", NULL },
 | 
			
		||||
    { NULL, NULL }
 | 
			
		||||
}; 
 | 
			
		||||
 | 
			
		||||
static int sigar_main(char *argv0)
 | 
			
		||||
{
 | 
			
		||||
    int status;
 | 
			
		||||
    sigar_t *sigar;
 | 
			
		||||
    char *errmsg;
 | 
			
		||||
    char *ptr;
 | 
			
		||||
    char sigarlib[8096], archlib[512];
 | 
			
		||||
    void *handle;
 | 
			
		||||
    sigar_callback_t *callbacks =
 | 
			
		||||
        (sigar_callback_t *)&sigar_callbacks;
 | 
			
		||||
 | 
			
		||||
    strcpy(sigarlib, argv0);
 | 
			
		||||
#ifdef WIN32
 | 
			
		||||
    if ((ptr = strstr(sigarlib, ".exe"))) {
 | 
			
		||||
        *ptr = '\0';
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
    ptr = strrchr(sigarlib, FILESEP);
 | 
			
		||||
    if (ptr) {
 | 
			
		||||
        ++ptr;
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        ptr = sigarlib;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sprintf(archlib, LIBPRE "%s." LIBEXT, ptr);
 | 
			
		||||
    strcpy(ptr, archlib);
 | 
			
		||||
 | 
			
		||||
#if defined(__sun)
 | 
			
		||||
    dlopen("/usr/lib/libnsl.so", RTLD_NOW|RTLD_GLOBAL);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
    if (!(handle = LoadLibrary(sigarlib))) {
 | 
			
		||||
        errmsg = "XXX FormatMessage";
 | 
			
		||||
    }
 | 
			
		||||
#else
 | 
			
		||||
    if (!(handle = dlopen(sigarlib, RTLD_LAZY))) {
 | 
			
		||||
        errmsg = dlerror();
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    if (!handle) {
 | 
			
		||||
        fprintf(stderr, "Error opening '%s': %s\n",
 | 
			
		||||
                sigarlib, errmsg);
 | 
			
		||||
        exit(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    while (callbacks->name) {
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
        callbacks->func = GetProcAddress(handle, callbacks->name);
 | 
			
		||||
#else
 | 
			
		||||
        callbacks->func = dlsym(handle, callbacks->name);
 | 
			
		||||
#endif
 | 
			
		||||
        callbacks++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (isatty(fileno(stdin))) {
 | 
			
		||||
        sigar_version_t *version;
 | 
			
		||||
 | 
			
		||||
        if (!sigar_callbacks.version.func) {
 | 
			
		||||
            exit(1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        version = sigar_callbacks.version.func();
 | 
			
		||||
 | 
			
		||||
        printf("version=%s, build date=%s\n",
 | 
			
		||||
               version->version, version->build_date);
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
        FreeLibrary(handle);
 | 
			
		||||
#else
 | 
			
		||||
        dlclose(handle);
 | 
			
		||||
#endif
 | 
			
		||||
        exit(0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    status = sigar_callbacks.open.func(&sigar);
 | 
			
		||||
 | 
			
		||||
    if (status != SIGAR_OK) {
 | 
			
		||||
        perror("sigar_open");
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* XXX pipe loop */
 | 
			
		||||
 | 
			
		||||
    sigar_callbacks.close.func(sigar);
 | 
			
		||||
#if defined(WIN32)
 | 
			
		||||
    FreeLibrary(handle);
 | 
			
		||||
#else
 | 
			
		||||
    dlclose(handle);
 | 
			
		||||
#endif
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
    if (argc == 1) {
 | 
			
		||||
        return sigar_main(argv[0]);
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        return 1; /*XXX*/
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user