use Fcntl qw(:flock); #... # Child does { open my $foo, '+<', $file or die $!; flock $foo, LOCK_EX | LOCK_NB or die $!; # Reading and Writing close $foo or die $!; } # child goes on... # Parent does sleep 1 while 1 < -M $file; { open my $foo, '<', $file or die $!; flock $foo, LOCK_EX or die $!; sleep 1; unless (kill 0, $child_pid) { # close file, restart child, and redo } # do stuff close $foo or die $!; }