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); }
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.

In reply to Re^2: Multiprocess - child process cannot be finished successfully by wonderG
in thread Multiprocess - child process cannot be finished successfully by wonderG

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.