# As before .. # ... sub main { my $start_mess = "===== Starting $TASK"; $start_mess .= " (@_)" if @_; $start_mess .= " ====="; error( $start_mess ); my $FH; open( HIGHLANDER, ">$PID_FILE") or die( "Cannot write to $PID_FILE: $!" ); { my $count = 0; { flock HIGHLANDER, LOCK_EX | LOCK_NB and last; sleep 1; redo if ++$count < 3; error( "Script is already running." ); die( "Startup failed, PID file locked." ); } } $FH = select(HIGHLANDER); $| = 1; select($FH); print HIGHLANDER $$; # .. # ..as before..