Thread Perl soll C programm vorzeitig beenden (5 answers)
Opened by Gast at 2008-08-27 16:21

murphy
 2008-08-27 19:04
#114040 #114040
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
nepos+2008-08-27 14:56:10--
Du kannst mittels alarm() einen Timer benutzen.
[...]


Das funktioniert aber nur, wenn man beim Auftreten des Alarmsignals nicht nur den Subprozess, sondern auch das Perlskript selbst beenden will.

Will man nur den Subprozess beenden, ist es ein wenig komplizierter:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
use strict;
use warnings;

use constant {
    TIMEOUT => 3
};

my $pid = fork;
die "Failed to spawn subprocess: $!\n" unless (defined($pid));

if ($pid) {
    $SIG{ALRM} = sub {
        kill TERM => $pid;
    };
    alarm TIMEOUT;

    if (waitpid($pid, 0) == $pid) {
        my ($err, $sig) = ($? >> 8, $? & 127);

        if ($sig) {
            print "Child died from signal $sig\n";
            exit $sig;
        }
        else {
            print "Child exited normally with status $err\n";
            exit $err;
        }
    }
    else {
        die "Error waiting for child: $!\n";
    }
}
else {
    exec @ARGV or die "Failed to run command: $!\n";
}
When C++ is your hammer, every problem looks like your thumb.

View full thread Perl soll C programm vorzeitig beenden