use strict; use Fcntl qw(:DEFAULT :flock); use FindBin qw($Bin); use lib "$Bin"; use JSON; use POSIX; my $JSON_FILE = $ARGV[0]; open my $file, '<', $JSON_FILE or die("$JSON_FILE Could not open file: + $!\n"); my $data; eval { $data = decode_json(<$file>); print $data; }; if ( $@ ){ print "Json file parsing failed.\n"; } my $targets = $data; my $filename = "/var/log/a.tmp"; my $newfilename = "/var/log/a.log"; open (my $fh, ">", $filename) or die "Could not open file '$filename' +$!\n"; my $time = strftime('%d-%m-%Y %H:%M:%S',localtime); for (my $index=0; $index <= $#$targets; $index++){ my $array = $targets->[$index]{label}; my $hostaddress = $array->{ip}; $time = strftime('%d-%m-%Y %H:%M:%S',localtime); defined(my $pid = fork) or die "fork failed: $!"; unless( defined($pid) ) { flock $fh, LOCK_EX; print $fh "Can't execute check: can't fork(): $!\n"; flock $fh, LOCK_UN; } unless($pid) { # child print "child: $$\n"; my $var; eval { $var = #setup a network connection...; $SIG{ALRM} = sub { flock $fh, LOCK_EX; print $fh "\n"; flock $fh, LOCK_UN;}; alarm(60); }; if( $@ ) { flock $fh, LOCK_EX; print $fh "Connection failed $@\n"; flock $fh, LOCK_UN; } unless( $var ) { flock $fh, LOCK_EX; print $fh "Connection failed"; flock $fh, LOCK_UN; } else { flock $fh, LOCK_EX; print $fh "Connection failed\n"; flock $fh, LOCK_UN; } close($fh); exit; # exit child process } waitpid($pid,0); } print "Parent Process"; close($fh); # Close file handler $fh rename ($filename, $newfilename) or die "Error in renaming $!"; alarm(0);
In reply to Re^6: Multiprocess - child process cannot be finished successfully
by wonderG
in thread Multiprocess - child process cannot be finished successfully
by wonderG
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |