Is there a correct Ruby idiom for timing out an operation? There seems
to be no alarm function in Ruby, so I cannot do it the Perl way:
$SIG{ALRM} = sub { die "timeout" };
eval {
alarm(3600);
# long-time operations here
alarm(0);
};
if ($@) {
if ($@ =~ /timeout/) {
# timed out; do what you will here
} else {
die; # propagate unexpected exception
}
}
(to quote the Perl Cookbook). I suppose one could do it with a call to
fork, have the parent send signal 0 to the child to see if it still lives,
and repeat this every (short time) until the child dies or the timeout
is reached. If I can do this without the fork it would be better though.
Is there a better way?
Thank you,
Hugh
hgs / dmu.ac.uk