Schrift
[thread]12218[/thread]

Noch eine Frage zu CGI und Prozessen (Seite 2)

Leser: 3


<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Struppi
 2008-08-01 12:48
#112973 #112973
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
http ist verbindungsloses Protokoll, d.h. dein Skript kriegt gar nicht mit wenn du im Browser auf stop drückst - Wenn, wird der Server oder das System das Skript abbrechen, wegen Laufzeitüberschreitung
GwenDragon
 2008-08-01 14:00
#112976 #112976
User since
2005-01-17
14849 Artikel
Admin1
[Homepage]
user image
@Struppi
Nicht ganz korrekt, den Abbruch kann der Apache sehr wohl mitbekommen.
http://perl.apache.org/docs/1.0/guide/debug.html#H...
Struppi
 2008-08-01 14:40
#112988 #112988
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Wenn ich die Beschreibung richtig deute funktioniert das ganze nur unter mod_perl?
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;
}
Struppi
 2008-08-02 10:57
#113013 #113013
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Ich hab nur einen Eintrag in sleep.log

Edit:und zwar diesen: Sat Aug 2 08:56:51 2008: started sleep.cgi
tecker
 2008-08-04 15:48
#113069 #113069
User since
2008-02-26
77 Artikel
BenutzerIn
[Homepage] [default_avatar]
Werde ich am Mittwoch gleich mal testen, wenn ich wieder vor Ort bin. Danke
xiconfjs
 2008-08-04 18:17
#113073 #113073
User since
2006-01-21
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Also beim klappt es wunderbar...danke für die Lösung :)

Code: (dl )
1
2
Mon Aug  4 16:02:51 2008: started sleep.cgi
Mon Aug 4 16:02:53 2008: SIGTERM!
Struppi
 2008-08-04 20:39
#113078 #113078
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Dann scheint es auf die Konfiguration des Servers anzukommen, bei mir kommt kein SIGTERM
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2008-07-21 18:25.