#!/usr/bin/perl use strict; use warnings; use CGI; use JSON; use Fcntl qw(:DEFAULT); use IO::Handle; STDOUT->autoflush(1); my $pfad = '/mein_pfad_zum/cgi-bin'; my $t = time(); if (defined $ARGV[0]) { unlink("$pfad/test_fork.txt"); if (sysopen(my $fh,"$pfad/test_fork.txt",O_WRONLY|O_APPEND|O_CREAT)) { $fh->autoflush(1); for (my $z = 0; $z < 10; $z ++) { print $fh "***Z-$z-".time()."\n"; sleep(1); } close($fh); } exit(); } my $cgi = new CGI; my $parameter = $cgi->param('parameter'); if (!defined $parameter) { print STDOUT CGI->new->header(-charset=>'ISO-8859-15').< fork() Fehler
Fehler:
Polling Ergebnisse:
HTML_TEIL ; } elsif ($parameter eq 'ini') { my $pid = fork(); # Fehler if (!defined $pid) { print STDOUT CGI->new->header(-charset=>'ISO-8859-15').time()." Fehler bei fork()\n"; } # Vater elsif ($pid) { my %out = (text => time().' Hier ist der Vater, terminiere jetzt ('.(time() - $t)." Sekunden)\n"); print STDOUT CGI->new->header(-charset=>'ISO-8859-15').JSON->new->encode(\%out); } # Sohn else { close STDIN; close STDOUT; exec("perl $pfad/test_fork.pl kommandozeile"); exit(); } } elsif ($parameter eq 'poll') { my %out = (text => ''); if (sysopen(my $fh,"$pfad/test_fork.txt",O_RDONLY)) { undef local $/; $out{text} = <$fh>; close($fh); } else { $out{text} = "Fehler '$!'"; } $out{text} .= ' ('.(time() - $t)." Sekunden)\n"; print STDOUT CGI->new->header(-charset=>'ISO-8859-15').JSON->new->encode(\%out); }