Child - ftpDirectoryListing: 449048769 Parent: currentListing: abc.xml xyz.xml deDuppedArray: dedup1.xml dedup2.xml Child - ftpDirectoryListing: 449049011 Parent: currentListing: abc.xml xyz.xml deDuppedArray: dedup1.xml dedup2.xml #### Child - ftpDirectoryListing: abc.xml xyz.xml Parent: currentListing: abc.xml xyz.xml deDuppedArray: dedup1.xml dedup2.xml Child - ftpDirectoryListing: abc.xml xyz.xml Parent: currentListing: abc.xml xyz.xml deDuppedArray: dedup1.xml dedup2.xml #### #! /usr/bin/perl -w use strict; use lib "/nss/nfx/shmem/lib/lib"; use lib "/nss/nfx/shmem/lib/lib64"; use lib "/nss/nfx/shmem/lib/lib/perl5/site_perl/"; use File::Basename; use Getopt::Long; use File::Copy; use Data::Dumper; use strict; use IPC::Shareable; my $child; my $serv_id; my $maxRcvrCount; my $stripeInstance; my $maxStripeInstance; my $user; my @ftpDirectoryListing=(); my @deDuppedArray=(); my @filesDownloaded=(); my $glue = 'data'; my %options = ( create => 0, exclusive => 1, mode => 0644, destroy => 0, ); my $deDuppedArrayHandle = tie @deDuppedArray, 'IPC::Shareable', 'data', \%options; my $filesDownloadedHandle = tie @filesDownloaded, 'IPC::Shareable', 'kala', \%options; sub pollDaemonParent { my $user = $_[0]; my @previousListing=(); my @currentListing=(); while (1) { @previousListing = @currentListing; @currentListing = getListing($user); $deDuppedArrayHandle->shlock(); @deDuppedArray = deDupArray1(\@previousListing, \@currentListing); print "Parent: currentListing: @currentListing deDuppedArray: @deDuppedArray\n"; $deDuppedArrayHandle->shunlock(); select (undef, undef, undef,.5); } } sub pollDaemonChild { my $user = $_[0]; while (1) { @ftpDirectoryListing = (); $deDuppedArrayHandle->shlock(); @ftpDirectoryListing = @deDuppedArray; $deDuppedArrayHandle->shunlock(); if ($#ftpDirectoryListing >= 0) { print "Child - ftpDirectoryListing: @ftpDirectoryListing\n"; } select (undef, undef, undef,1); } } sub getListing { my @ftpListing1 = (); push (@ftpListing1, "abc.xml"); push (@ftpListing1, "xyz.xml"); return @ftpListing1; } sub deDupArray1 { my @difference = ("dedup1.xml", "dedup2.xml"); return @difference; } sub addToDeleteList { $|++; $filesDownloadedHandle->shlock(); push (@filesDownloaded, "$_[0]"); $filesDownloadedHandle->shunlock(); } # main { $user = "IAmUser"; $serv_id = "1"; $maxRcvrCount = "5"; $stripeInstance = "1" ; $maxStripeInstance = "2"; $SIG{'ALRM'} = 'sig_alrm'; my $startingInstanceNum=1; my @kids; for (1 .. $maxStripeInstance) { $stripeInstance = $startingInstanceNum; unless ($child = fork) { # i'm the child die "cannot fork: $!" unless defined $child; pollDaemonChild($user); exit; } push @kids, $child; # in case we care about their pids $startingInstanceNum++; } print "@kids\n"; pollDaemonParent($user); }