RE: Timing several processes

From: Anthony Akens (AAkens_at_egh.org)
Date: 12/03/03


Date: Wed, 3 Dec 2003 13:49:56 -0500
To: "Wiggins d Anconia" <wiggins@danconia.org>,	"Tom Kinzer" <tomkinzer@earthlink.net>,	<beginners@perl.org>

Here's the sample code I'm trying... In essence I would expect to see
The following output:

Running vmstat
Running sar
Waiting... (at this point a long wait while sar and vmstat finish)
Done!

Instead I am seeing:
Running vmstat
Running sar (The long wait is here)
Waiting...
Done!

In watching the file sizes, I can see both files are created at the
Same time, but sar does not produce any output in its file until
Vmstat finishes.

-Tony

#!/usr/bin/perl -w

use strict;

print "Running vmstat\n";
defined(my $vmstat_pid = fork) or die "Cannot fork: $!";
unless ($vmstat_pid) {
  exec "vmstat 5 5 > /log/monitor/delta/vmstat.out";
  die "cannot exec vmstat: $!";
}
print "Running sar\n";
defined(my $sar_pid = fork) or die "Cannot fork: $!";
unless ($sar_pid) {
  exec "sar 5 5 > /log/monitor/delta/sar.out";
  die "cannot exec date: $!";
}
print "Waiting...\n";
waitpid($vmstat_pid, 0);
waitpid($sar_pid, 0);
print "done!\n";

-----Original Message-----
From: Wiggins d Anconia [mailto:wiggins@danconia.org]
Sent: Wednesday, December 03, 2003 1:31 PM
To: Akens, Anthony; Tom Kinzer; beginners@perl.org
Subject: RE: Timing several processes

I was going to suggest POE as well, 'til I saw that little word 'simple'
:-)...

Have you read:

perldoc perlipc
perldoc -f fork
perldoc -f wait
perldoc -f waitpid

Of course POE is what makes keeping track of all those spun off
processes trivial, but learning it is I will admit not trivial...

http://danconia.org

> I already have some ideas for how I want to build the page, how
> to parse the data I will generate, etc.
>
> As I said, I've looked at some of the other tools out there,
> and want to stick to some simple perl code to parse out the
> information and return the results.
>
> The only bit I'm not sure of is how to tell if all forked processes
> have completed before moving on.
>
>
> -Tony
>
> -----Original Message-----
> From: Tom Kinzer [mailto:tomkinzer@earthlink.net]
> Sent: Wednesday, December 03, 2003 12:35 PM
> To: beginners@perl.org
> Subject: RE: Timing several processes
>
>
> http://poe.perl.org
>
> Maybe this would be a good job for POE?
>
> -Tom Kinzer
>
>
> -----Original Message-----
> From: Akens, Anthony [mailto:AAkens@egh.org]
> Sent: Wednesday, December 03, 2003 7:49 AM
> To: beginners@perl.org
> Subject: Timing several processes
>
>
> Hi all!
>
> I'm wanting to write a simple web-based tool to see the status of
> several servers at a glance. I know there are many solutions
> existing, but I can't learn as much about perl by just using one of
> those as I can by writing my own. The first step I want to do is call

> a script from cron that runs several basic monitoring tools (sar,
> vmstat, df, iostat, etc) and saves the output of each to a file. Then
> I'd parse those files up, and write a summary file.
>
> Easy enough. And I could certainly do it with by calling the tools
> one at a time. However, I'd like to get roughly 1 minute of vmstat,
> iostat, and sar output.... Simultaneously. So I'm supposing I'd want
> to fork off each process, and then when those are all done come back
> and run a script that then parses those results out for the individual

> statistics I'm looking for.
>
> I've never used fork before, and while it looks fairly straight
> forward what I am not sure of is how to make sure all of those forked
> processes have completed before moving on and parsing the files.
>
> Any pointers?
>
> Thanks in advance
>
> -Tony
>

-- 
To unsubscribe, e-mail: beginners-unsubscribe@perl.org
For additional commands, e-mail: beginners-help@perl.org