Thread Problem mit neuem Prozess (13 answers)
Opened by anamollo4music at 2013-03-20 14:04

anamollo4music
 2013-03-20 14:04
#166455 #166455
User since
2013-03-19
42 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

gestern erst registriert und schon muss ich euch das zweite Mal belästigen ;-)

Ich habe folgendes vor:

Mit einem CGI-Skript soll nach dem Klick auf einen Button alle 10 Sekunden ein Wert in eine mySQL-DB geschrieben werden.
Dies soll solange geschehen, bis ein "Schreiben stoppen"-Button geklickt wird.

Dazu dachte ich mir, mit einer fork-Anweisung einen Child-Prozess zu generieren, der im Hintergrund alle 10 Sekunden die besagten Werte in die DB schreibt und das eigentliche CGI-Skript (HTML-Formular) für den Benutzer zur Verfügung steht.

Leider funktionierte das aber nicht.


Hier mein Code:

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
my $pid;
my $stop_geklickt;

if($cgi->param('button_werte_schreiben_geklickt')
{
   $stop_geklickt = 0;
   $pid = fork();        #Kindprozess erzeugen

   if($pid == 0)         #hier bin ich im Kindprozess
   {
      while($stop_geklickt == 0)  #solange kein Stop gedrückt wurde... 
      {
           # SQL-INSERT_INTO-Anweisung
           sleep(10);
      }
      exit(0);          #Kindprozess beenden
   }
   else
   {
       # Was kommt in den else-Zweig??
   }
   
}


if($cgi->param('button_stop_geklickt')
{
    $stop_geklickt = 1;
}


Leider funktioniert das nicht.

Da ich noch nie mit forks gearbeitet habe, auch die Frage: Was gehört in den else-Zweig?

Kann ich wie ich es mache überhaupt den "stop-Button" abfragen und einen Kindprozess erzeugen?

Wird der Kindprozess auch so wie ich es mache mit exit() beendet, ohne zu einem "Zombie" zu werden, wenn auf "stop" gedrückt wurde?


Also nochmal zusammenfassend:
Sobald auf einen Button "Werte schreiben" geklickt wird, sollen alle 10 Sekunden Werte in eine DB geschrieben werden. Dies soll über einen "nebenlaufenden Prozess" geschehen, damit das Formular weiterhin verfügbar ist.
Wenn auf den Button "stop" gedrückt wird, soll das Schreiben in die DB unterbrochen werden.



Vielen Dank für euere Hilfe!


Gruß
Joh

View full thread Problem mit neuem Prozess