open(PID, "> $CONF{upd_lockfile}") ; flock(PID, 2); seek(PID, 0, 2); for my $a (@pids) { print(PID "$a\n") if ($a != $$); } flock(PID, 8); #### use Fcntl qw( LOCK_EX ); sub remove_pid { open(my $PID, '+>>', $CONF{upd_lockfile}") or die $!; flock($PID, LOCK_EX) or die $!; seek($PID, 0, SEEK_SET) or die $!; chomp( my @pids = <$PID> ); @pids = grep $_ != $$, @pids; seek($PID, 0, SEEK_SET) or die $!; print($PID "$_\n") for @pids; truncate($PID, tell($PID)) or die $!; kill(CONT => $parend_pid) or die $! if !@pids; close($PID) or die $!; }