On Thu, Apr 16, 2009 at 8:32 AM, Michael Alipio <daem0n...@yahoo.com> wrote: > > Hi, > > I have this code: > > die "Could not fork command1!" unless defined (my $command1_pid = fork); > if ($command1_pid == 0){ > open EXTERNAL_PROG1, "external_prog1 |" or die "Can't run external_prog1"; > > while (<EXTERNAL_PROG1>){ > if (/pattern/){ > die "Could not fork command2" unless defined (my $command2_pid = fork); > die "Could not fork command3" unless defined (my $command3_pid = fork); > > if ($command2_pid == 0){ > `external_prog2` > } > } > waitpid($command2_pid,0); > > if ($command3_pid == 0){ > `external_prog3`; > } > waitpid($command3_pid, 0); > > } > } > > > > That is, run external_prog1 and watch the output.. as soon as it sees a > particular pattern, run two other external commands at the same time. > However, with the above code, I keep getting duplicated external_prog2 > process everytime i run the script. I need to track both PIDs of > external_prog2 and 3 as I need to kill them later in the code. However, i'm > having trouble running them at the same time. > if I will put a "kill 15, $command3_pid" right after the first waitpid, i > will surely kill one of those two command 2 process. I tried several places > to put "die" lines and "waitpids" but I couldn't get it right. It's either > they don't run at the same time or they will run but command 2 has a twin > brother. > > Any idea how to solve this chicken and egg problem? >
You have problems with scope. At the top of your program, add use warnings; use strict; The messages that are printed should solve your problem. HTH, -- j -------------------------------------------------- This email and attachment(s): [ ] blogable; [ x ] ask first; [ ] private and confidential daggerquill [at] gmail [dot] com http://www.tuaw.com http://www.downloadsquad.com http://www.engatiki.org values of β will give rise to dom! -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/