Thread Problem mit neuem Prozess
(13 answers)
Opened by anamollo4music at 2013-03-20 14:04
Wie gesagt, Perl emuliert unter Windows fork durch Threads und emuliert exec im wesentlichen durch eine Kombination der Systemaufrufe CreateProcess und WaitForSingleObject.
Diese Emulation ist nicht perfekt und es gibt Verhaltensunterschiede zu einer echten, nativen Implementation von fork und exec. Insbesondere kann man mit kill nur einen mit fork abgespaltenen Pseudoprozess töten, nicht jedoch einen echten Prozess. In Deinem Skript passiert daher folgendes: fork erzeugt einen neuen Thread im gleichen Prozess und erstellt eine unabhängige Kopie des Perlinterpreters, die in dem neuen Thread weiterläuft. exec ersetzt diesen Pseudoprozess nicht durch das externe Programm, sondern startet das externe Programm und wartet auf dessen Ende. kill signalisiert dem Pseudoprozess, dass er abbrechen soll, woraufhin der kopierte Perlinterpreter und sein ausführender Thread beendet werden. Das Betriebssystem bekommt lediglich mit, dass niemand mehr auf das Ende des externen Programmes wartet und entkoppelt den externen Prozess vollständig vom Perlinterpreter. Beide Prozesse laufen munter weiter, bis sie sich aus eigenem Antrieb beenden. Ich empfehle, für detailliertere Informationen zum Thema die Dokumentation der fork-Emulation unter perlfork zu lesen. Und um echte Prozesskontrolle unter Windows zu betreiben, wird man nicht umhin kommen, systemspezifische Funktionen aus Modulen wie Win32 und Win32::API zu verwenden. When C++ is your hammer, every problem looks like your thumb.
|