in reply to Re: Multiprocess - child process cannot be finished successfully
in thread Multiprocess - child process cannot be finished successfully
Thank you very much. I just refined my code as above. I have very less exeprience is Perl, could you please help to review if everything is ok? I just debug my code, it threw an error during "rename" - Error in renaming No such file or directory. I want to rename the filename after everyhing is written into the file.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 = "/tmp"; my $newfilename = "/filename"; open (my $fh, ">", $filename) or die "Could not open file '$filename' +$!\n"; print $fh "message..\n"; print $fh "message...\n"; my $time = strftime('%d-%m-%Y %H:%M:%S',localtime); my $logfile = "/var/log/mylog.log"; open (my $logfile, ">>", $logfile) or die "Could not open file '$logfi +le' $!"; for (my $index=0; $index <= $#$targets; $index++){ my $array = $targets->[$index]{labels}; my $name = $array->{name}; $time = strftime('%d-%m-%Y %H:%M:%S',localtime); # Set a timeout period $SIG{ALRM} = sub { flock $logfile, LOCK_EX; print $logfile "message...\n"; flock $logfile, LOCK_UN; flock $fh, LOCK_EX; print $fh "message...\n"; flock $fh, LOCK_UN; alarm(60); defined(my $pid = fork) or die "fork failed: $!"; unless( defined($pid) ) { flock $logfile, LOCK_EX; print $logfile "message...\n"; flock $logfile, LOCK_UN; } unless($pid) { # child print "child: $$\n"; my $var; eval { do something here... }; if( $@ ) { flock $logfile, LOCK_EX; print $logfile "message...\n"; flock $logfile, LOCK_UN; } unless( $var ) { flock $logfile, LOCK_EX; print $logfile "message...\n"; flock $logfile, LOCK_UN; flock $fh, LOCK_EX; print $fh "message...\n"; flock $fh, LOCK_UN; } else { flock $fh, LOCK_EX; print $fh "message...\n"; flock $fh, LOCK_UN; flock $logfile, LOCK_EX; print $logfile "message...\n"; flock $logfile, LOCK_UN; } close($fh); close($logfile); exit; # exit child process } waitpid($pid,0); # could I refine like this? print "Parent Process"; close($fh); # Close file handler $fh close($logfile); # Close file handler $logfile rename ($filename, $newfilename) or die "Error in renaming $!"; alarm(0); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Multiprocess - child process cannot be finished successfully
by bliako (Abbot) on Sep 09, 2022 at 14:47 UTC | |
by wonderG (Novice) on Sep 09, 2022 at 15:25 UTC | |
by bliako (Abbot) on Sep 09, 2022 at 21:50 UTC | |
by wonderG (Novice) on Sep 10, 2022 at 02:04 UTC | |
by Marshall (Canon) on Sep 11, 2022 at 07:51 UTC | |
by wonderG (Novice) on Sep 10, 2022 at 08:08 UTC |