perl alarm

Giorgos Keramidas keramida at ceid.upatras.gr
Wed Jan 9 14:03:50 EET 2008


On 2008-01-09 13:35, "Giorgos D. Pallas" <gpall at ccf.auth.gr> wrote:
> Γεια χαρά λιστές!
>
> Το παρακάτω δεν θα έπρεπε να λειτουργεί;
>
> $SIG{ALRM} = sub { insert_error("FATAL - timeout accessing $hostname"); exit;  };
> alarm(300);
>
> # diadikasia pou mporei na kollisei kapou
>
> #apenergopoihsh alarm
> alarm(0);

Ναι.  Στο `perlipc' manpage μάλιστα έχει σχεδόν το ίδιο κομμάτι κώδικα
για παράδειγμα:

    eval {
        local $SIG{ALRM} = sub { die "alarm clock restart" };
        alarm 10;
        flock(FH, 2);   # blocking write lock
        alarm 0;
    };
    if ($@ and $@ !~ /alarm clock restart/) { die }

> Έχει κανείς να προτείνει κάποιο ανάλογο τρόπο για το ίδιο αποτέλεσμα;

Εγώ συνήθως προτιμώ η alarm function να μην είναι ανώνυμο function:

    my %children;                       # Hash of PIDS we have spawned.
    my $timeout_seconds;                # Global timeout in seconds.

    sub timeout_hook();
    sub timeout_hook {
        kill(15, keys(%children))
            if (%children);
        error("timed out after $timeout seconds");
        exit(1);
    }

    # και παρακάτω ...

    if ($timeout_seconds > 0) {
        $SIG{ALRM} = \&timeout_hook;
        alarm($timeout_seconds);
    }

    # long running stuff




More information about the Linux-greek-users mailing list