#!/usr/bin/perl -w use strict; use POSIX ":sys_wait_h"; use Fcntl ':flock'; $|++; # set a timeout in second waiting for an exclusive lock my $timeout = 10; # in main body of code open file for append # filehandle will be available to all your kids open FH, ">>$file" or die "Can't open $file: $!"; my $pid = fork() die "Can't fork $!\n" unless defined $pid; unless ($pid) { # in a kid, get an exclusive lock on file my $tries = 0; until (flock FH, LOCK_EX|LOCK_NB) { sleep 1; die "Can't get exclusive lock $!\n" if $tries++ > $timeout } seek FH, 0, 2; # make sure we are at EOF print FH $blah; # safe to print here flock FH, LOCK_UN; # release lock for other kids exit; # kill kid } # wait for all kids to finish my $kids; do{ $kids = waitpid(-1, &WNOHANG) }until $kids == -1; close FH; # close file in parent