my $lockfile = '/var/lock/mylockfile'; open L, $lockfile; close L; die "Can't generate lockfile $!" unless -e $lockfile; my $pid = fork(); if ( $pid == 0 ) { # child my $error = update_somefile(); die $error if $error; unlink $lockfile or die $!; # more stuff } elsif ( $pid ) { # parent my $timeout = 0; while ( -e lockfile ) { sleep 1; $timeout++; die "of old age waiting for child to finish update" if $timeout > $whatever_time; } # lockfile gone, child has completed update so... } else { die "Fork failed!\n"; }