Newsgroup: it.comp.lang.perl
Titolo: Problemi con CGI e fork

Salve a tutti
Ho un problema con un CGI che esegue una fork
Ho provato in diversi modi e  anche scaricato esempi da internet
In tutti i casi l'output html viene visualizzato alla fine COMPLETO 
dello script (quindi anche quando il processo figlio e' finito)
Ho settato la variabile $|=1 per forzare il flush dell'output
ma questo sembra non servire a nulla
A questo punto mi viene il dubbio che il problema dipenda dall'installazione
Nel mio caso e'
	Pc Windows 20000
	perl 5.6.1
	Web server Netscape 4.1 oppure Apache 2.0
Di seguito lo script di prova.
Ringraziando in anticipo per la collaborazione
Saluti LAGO
#!/perl/bin/perl.exe
$| =1;
##
  use CGI;
  $query = new CGI;
#
  my $pid_parent = $$;
  my $pid=fork();
  if ($pid==0)
  {
    print "start child $pid \n";
    sleep(20);
#   print "end child $pid \n";
  }
  else
  {
    print $query->start_html($PROGRAM);
    print "<H1> Test</H1>\n";
    print "start parent $pid \n";
    for ($j=0;$j<10;$j++) { print "parent $j \n";}
    print "end   parent $pid \n";
    print $query->end_html;
    exit(0);
  }

 writes:
alessandro> Salve a tutti Ho un problema con un CGI che esegue una
alessandro> fork
alessandro> Ho provato in diversi modi e anche scaricato esempi da
alessandro> internet
alessandro> In tutti i casi l'output html viene visualizzato alla fine
alessandro> COMPLETO dello script (quindi anche quando il processo
alessandro> figlio e' finito)
alessandro> Ho settato la variabile $|=1 per forzare il flush
alessandro> dell'output ma questo sembra non servire a nulla
che ammenita` la fork,
$|=1 pero` dovrebbe essere la scelta piu` influente dal lato perl,
la comunicazione con il server non avviene in modo istantaneo,
ci sono molti buffer in mezzo,
anche il client (browser) potrebbe decidere di fare il rendering
della pagina solo dopo aver ricevuto _tutti_ i dati.
Io so che Mozilla 
www.mozilla.org
, almeno dalle versioni 0.9,
effettua un rendering dinamico dell'html in corrispondenza
a cio` che man mano riceve. Questo rendering dinamico e` una
operazione tutt'altro che semplice ed e` dispendiosa.
Puoi capire con piu` esattezza come avviene la comunicazione
facendo al server la richiesta HTTP via telnet. Cosi` ti rendi conto
se il flusso dati ha le interruzioni che vorresti.
alessandro> A questo punto mi viene il dubbio che il problema dipenda
alessandro> dall'installazione Nel mio caso e'
alessandro> 	Pc Windows 20000 perl 5.6.1 Web server Netscape 4.1
alessandro> oppure Apache 2.0
alessandro> Di seguito lo script di prova.
alessandro> Ringraziando in anticipo per la collaborazione
alessandro> Saluti LAGO
alessandro> #!/perl/bin/perl.exe $| =1; ## use CGI; $query = new CGI;
alessandro> # my $pid_parent = $$; my $pid=fork(); if ($pid==0) {
alessandro> print "start child $pid \n"; sleep(20); # print "end child
alessandro> $pid \n";
alessandro>   }
alessandro>   else { print $query->start_html($PROGRAM); print "<H1>
alessandro> Test</H1>\n"; print "start parent $pid \n"; for
alessandro> ($j=0;$j<10;$j++) { print "parent $j \n";} print "end
alessandro> parent $pid \n"; print $query->end_html; exit(0);
alessandro>   }
Saluti,
MARco
-- 
x(t),y(t) = th(3t-34.5)*e^[-(3t-34.5)^2]/2-4.3+e^(-1.8/t^2)/(.8*atg(t-
3)+2)(t-1.8)-.3th(5t-42.5),(1.4e^[-(3t-34.5)^2]+1-sgn[|t-8.5|-.5]*1.5*
|sin(pi*t)|^[2e^(-(t-11.5)^2)+.5+e^(-(.6t-3.3)^2)])/(.5+t)+1  ; 0<t<14