Thread fork() Windows und CGI (17 answers)
Opened by bianca at 2013-09-25 08:29

bianca
 2013-09-25 08:29
#170580 #170580
User since
2009-09-13
7011 articles
BenutzerIn

user image
Zum Thema fork() auf Windows habe ich jetzt einiges gelesen.
Was ich gern möchte ist nach wie vor eine Art bidirektionale Kommunikation mit einem Client aber über CGI und nicht Websockets.
In etwa so:
Client startet Request
Server startet Script, Script forkt
Vaterprozess gibt eine Zuordnungs-ID an CGI Client zurück und terminiert
Kindprozess pollt auf Antwortdatei
Client fragt Daten vom Nutzer ab
Client sendet Daten mit Zuordnungs-ID an Serverscript welches die Antwortdatei schreibt
Kindprozess von eben sieht die Antwortdatei, vollendet seine Arbeit und terminiert

Problem auf Windows ist - so wie ich es bisher gelesen habe - dass ein mit Perl geforkter Kindprozess als "Unterprozess" zum Vater läuft und nicht als echter Parallelprozess. Die Prozess-ID $$ hat auch immer ein Minuszeichen als Präfix. Das heißt, der Webserver wartet immer indirekt auf den Sohn, denn der Vater wird von Windows intern nicht terminiert solange der Sohn noch läuft. Trifft das zu?

Das würde bedeuten, ich hätte oben bei dem Punkt "Vaterprozess ... und terminiert" ein Problem, welches ich auch in Versuchen nachstellen kann. Man kann den Vaterprozess nicht kill'en, ohne den Sohn mit zu eliminieren, richtig?

Und die verschiedenen Macharten im Beitrag von topeg aus 2011 msg #150204 beziehen sich - soweit ich das sehe - nicht auf Windows. Auch zutreffend?

Nun die Frage: Gibt es mittlerweile andere Möglichkeiten? Vielleicht mit Perl 6? Vielleicht mit Windows 7?
Oder hat sich daran nichts geändert bis heute?
Wie würdet ihr das machen?

Irgendwo habe ich auch gelesen, dass man mit einem Workflow mehr oder weniger den kompletten Speicher kopieren kann, um einen parallelen Kindprozess zu erzeugen. Also Speicher wäre in meinem Fall nicht unbedingt das Problem. Bei meiner Anwendung geht es nicht um viele Requests und der Server tut ansonsten fast nichts.

Bin für jeden Hinweis dankbar. Auch wenn es einfach nur eine Bestätigung meiner o.a. Erkenntnisse ist.
10 print "Hallo"
20 goto 10

View full thread fork() Windows und CGI