Thread Echten Parallelprozess unter Linux (42 answers)
Opened by bianca at 2013-11-01 11:00

topeg
 2013-11-01 13:47
#171714 #171714
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Um den Ablauf unter Unix/Linux etwas klarer zu machen:

Unter Linux kommuniziert jeder Prozess mit einem Terminal. Das ist heutzutage meinst ein virtuelles Terminal, kann aber auch serielles Terminal oder ähnliches sein.
Wenn ein Prozess ein anderes Programm startet und dessen Ein/Ausgaben nutzen will, erzeugt das Programm ein virtuelles Terminal und startet darin das Programm. Das passiert bei den POSIX-Aufrufen automatisch im Hintergrund und ist über Libs abstrahiert. "IPC::Open2/3" macht das genau so.
Mehrere Programme können parallel mit einem Terminal kommunizieren.

Wenn Apache nun ein CGI-Script startet, so wird zuerst ein virtuelles Terminal gestartet, darin eine Shell, welches das Script startet. (Darum funktioniert auch das Shebang unter Linx/Unix. Das wird von der Shell ausgewertet). Das Script kommuniziert mit dem Terminal und Apache ließt die Ausgaben.
Wenn nun im Script geforkt wird, so benutzt der geforkte Prozess das selbe Terminal. Auch wenn das original Script nicht mehr läuft ist ein Prozess mit dem Terminal verbunden und das weiß auch Apache. Erst wenn kein Prozess mehr mit dem Terminal Kommuniziert wird das Terminal geschlossen und Apache weiß das die Ausgabe beendet ist.
Durch das schließen von STDIN, STDOUT und STDERR passiert genau das. Das Teminal hat keine Verbindung mehr zum Programm und beendet sich, worauf hin Apache seine Ausgabe macht.

Prozesse die sich von einem Terminal entkoppeln, nennt man Deamons.

Es ist möglich sich mit einem anderen laufenden virtuellem Terminal zu verbinden. Das machen z.B. Sniffer, welche Konsolenausgaben mitschneiden.

View full thread Echten Parallelprozess unter Linux