Kevin Old <[EMAIL PROTECTED]> wrote:
>
> Basically all I do is pipe the input from ps into my perl program, and
> grep for cdlor.....but the path to perl has moved (long story) and the
> cdlor isn't printed in the command output from ps.
Can you explain?
I can't see why changing the path to perl would break the "ps|grep"
command...
> #!/usr/bin/perl -w
>
> $regex =
> '^\s{0,4}(\d{1,7})\s?(\d{2}:\d{2}:\d{2}|\s{0,3}\w{4}\d{2})\s{0,8}(\d{1,4}
> -?)?(\d{2}):(\d{2}):(\d{2})';
I prefer unpack() for this sort of thing -->
#
# this was for Solaris "top", but you get the idea
#
my @fields = qw(pid psid user thr pri nice size res state time cpu cmd);
my @template = qw(A6 A6 A9 A4 A4 A4 A6 A6 A7 A7 A7 A*);
my %ret;
while (<TOP>) {
next if 1..5;
my %proc;
s/^\s+//, s/\s+$//
for @[EMAIL PROTECTED] = unpack "@template", $_;
$ret{$proc{pid}} = \%proc;
}
wantarray ? %ret : \%ret;
}
> $pipe = open(PH, "ps -eo pid,stime,etime,comm \| grep cdlor |");
^
No need to escape the pipe.
[ snip parsing ]
> foreach $p (@pids) {
>
> $count{$p}++;
> print $p . "\n";
>
> next if $count{$p} >= 2;
>
> @sysargs = ("kill", $p);
> system("kill $p") == 0 and print "$p killed\n";
> # or die "system @sysargs failed $?";
And here you could use the kill() function instead of system(). It's
faster -- doesn't spawn a subprocess -- and lets you do a better job
of error checking and reporting.
> }
>
--
Steve
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]