Thread Noch eine Frage zu CGI und Prozessen
(17 answers)
Opened by tecker at 2008-07-21 18:25 Struppi+2008-08-01 10:48:42-- 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; } |