Thread Noch eine Frage zu CGI und Prozessen (17 answers)
Opened by tecker at 2008-07-21 18:25

Dubu
 2008-08-02 03:56
#113011 #113011
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Struppi+2008-08-01 10:48:42--
http ist verbindungsloses Protokoll, d.h. dein Skript kriegt gar nicht mit wenn du im Browser auf stop drückst [...]

HTTP ist zustandslos ("stateless"), aber nicht verbindungslos. Es nutzt schließlich TCP (und nicht z.B. UDP).
Es existiert eine Verbindung zwischen Server und Client, bis eine Seite sie beendet.

Mein Apache schickt einem CGI-Skript (kein mod-perl!) beim Abbruch der Verbindung übrigens ein SIGTERM, kein SIGPIPE. Und irgendwelche Ausgaben nach STDERR im Eventhandler landen nicht in Apaches Error-Log, wahrscheinlich wird das Filehandle schon vorher geschlossen. Man kann aber natürlich im Skript STDERR in eine Datei umleiten, dann kann man auch Ausgaben vom Signal-Handler sehen. Beispiel:
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
36
#!/usr/bin/perl
use strict;
use warnings;
use CGI;

# Ein Handler fuer alle Signale
$SIG{$_} = \&handle_sig for keys %SIG;

my $c = new CGI;
open (STDERR, '>', '/tmp/sleep.log') or die $!;
print STDERR scalar(localtime), ": started sleep.cgi\n";

# Header etc. schicken
print
    $c->header('endless sleep'),
    $c->start_html();

# Dann Endlosschleife
$|++;
while (1) {
    sleep 1;
    print ".";
}

# Wird nie erreicht
print $c->end_html;
exit 0;

####################################

sub handle_sig {
    my ($sig) = @_;

    print STDERR scalar(localtime), ": SIG$sig!";
    exit -1;
}

View full thread Noch eine Frage zu CGI und Prozessen