bonjour,
à priori ce que tu cherches à faire c'est un timeout sur un traitement qui lui est potentiellement bloquant j'imagine (comme une operation sur les sockets par exemple), ce qui correspond à la fonction
alarm qui permet de lever un signal SIGALRM au bout d'un nombre de secondes donné, le principe est donc d'indiquer au programme qu'à la réception dudit signal on veut qu'il exécute notre fonction
le code d'exemple tiré de la doc est très parlant :
1 2 3 4 5 6 7 8 9 10 11 12 13
| eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # propagate unexpected errors
# timed out
}
else {
# didn't
} |
Partager