>perl lockdemo.pl locker: flock LOCK_EX locker: locked locker: sleep 10 main: alarm 5 main: flock LOCK_EX ### The lock is acquired here main: timeout at lockdemo.pl line 30. ### before the timeout occurs. main: 5 seconds have passed locker: flock LOCK_UN locker: unlocked #### sub locker { my $start=time(); open my $h,'>>','tempfile.tmp'; say 'locker: flock LOCK_EX'; flock($h,LOCK_EX); say 'locker: locked'; say 'locker: sleep 10'; sleep 10; say 'locker: flock LOCK_UN'; flock($h,LOCK_UN); say 'locker: unlocked'; close $h; my $stop=time(); say 'locker ran for ',$stop-$start,' seconds'; } #### >perl lockdemo-timed.pl locker: flock LOCK_EX locker: locked locker: sleep 10 main: alarm 5 main: flock LOCK_EX main: timeout at lockdemo-timed.pl line 30. main: 5 seconds have passed locker: flock LOCK_UN locker: unlocked locker ran for 10 seconds > #### H:\tmp\lockdemo>perl lockdemo-timed.pl locker: flock LOCK_EX locker: locked locker: sleep 10 main: alarm 5 main: flock LOCK_EX locker: flock LOCK_UN main: alarm 0 main: successfully locked main: 9 seconds have passed locker: unlocked locker ran for 10 seconds H:\tmp\lockdemo> #### sub locker { $SIG{'ALRM'}='IGNORE'; my $start=time(); open my $h,'>>','tempfile.tmp'; say 'locker: flock LOCK_EX'; flock($h,LOCK_EX); say 'locker: locked'; say 'locker: sleep 10 using select'; select(undef,undef,undef,10); say 'locker: flock LOCK_UN'; flock($h,LOCK_UN); say 'locker: unlocked'; close $h; my $stop=time(); say 'locker ran for ',$stop-$start,' seconds'; } #### >perl lockdemo-select.pl locker: flock LOCK_EX locker: locked locker: sleep 10 using select main: alarm 5 main: flock LOCK_EX main: timeout at lockdemo-select.pl line 30. main: 5 seconds have passed locker: flock LOCK_UN locker: unlocked locker ran for 10 seconds > #### H:\tmp\lockdemo>perl lockdemo-select.pl locker: flock LOCK_EX locker: locked locker: sleep 10 using select main: alarm 5 main: flock LOCK_EX locker: flock LOCK_UN main: alarm 0 main: successfully locked main: 9 seconds have passed locker: unlocked locker ran for 10 seconds H:\tmp\lockdemo> #### sub locker { $SIG{'ALRM'}=sub { warn "*** ALARM ***" }; my $start=time(); open my $h,'>>','tempfile.tmp'; say 'locker: flock LOCK_EX'; flock($h,LOCK_EX); say 'locker: locked'; say 'locker: sleep 10 using select'; select(undef,undef,undef,10); say 'locker: flock LOCK_UN'; flock($h,LOCK_UN); say 'locker: unlocked'; close $h; my $stop=time(); say 'locker ran for ',$stop-$start,' seconds'; } #### >perl lockdemo-signal.pl locker: flock LOCK_EX locker: locked locker: sleep 10 using select main: alarm 5 main: flock LOCK_EX main: timeout at lockdemo-signal.pl line 30. main: 5 seconds have passed locker: flock LOCK_UN locker: unlocked locker ran for 10 seconds >