Kerstin: Aufruf eines externen Programms

Hallo,

mal eine simple Frage:

Ich möchte gern aus meinem PHP-Skript heraus ein externes Programm aufrufen. Wie das ganze geht, weiß ich, z.B. exec('xsltproc ...');
Allerdings ist mir nicht ganz klar, wie der Server reagiert, wenn von mehreren Clients nahezu gleichzeitig das selbe externe Programm auf dem Server aufgerufen wird. Ich habe also einen Server mit dem Skript, welches das Programm aufruft. Dies tun nun mehrere Clients gleichzeitig. Da das Programm auch einige Sekunden benötigt, um seine Arbeit fertig zu stellen, stellt sich eben hier die Frage: Was passiert bei einem gleichzeitigen Aufruf von mehreren Clients aus?

Gruß,
Kerstin

  1. Moin!

    Ich möchte gern aus meinem PHP-Skript heraus ein externes Programm aufrufen. Wie das ganze geht, weiß ich, z.B. exec('xsltproc ...');

    Wunderbar.

    Allerdings ist mir nicht ganz klar, wie der Server reagiert, wenn von mehreren Clients nahezu gleichzeitig das selbe externe Programm auf dem Server aufgerufen wird. Ich habe also einen Server mit dem Skript, welches das Programm aufruft. Dies tun nun mehrere Clients gleichzeitig. Da das Programm auch einige Sekunden benötigt, um seine Arbeit fertig zu stellen, stellt sich eben hier die Frage: Was passiert bei einem gleichzeitigen Aufruf von mehreren Clients aus?

    Das hängt davon ab, was das Programm macht. Für jede Anfrage stellt der Webserver einen eigenen Prozess zur Verfügung, d.h. mit dem Programm passiert das gleiche, als riefen es zwei lokale Benutzer gleichzeitig auf: Der Programmcode wird in den Speicher (des Benutzers bzw. Prozesses) geladen und ausgeführt. Da dies allerdings unterschiedliche Prozesse sind, merken diese in der Regel nichts voneinander.

    Spannend wird es nun, wenn das mehrfach gestartete Programm auf eine Resource, z.B. eine Datei zugreifen möchte. Dann können so genannte Race Conditions entstehen, wodurch nicht sichergestellt ist, dass die Prozesse einen sinnvollen Dateiinhalt lesen oder die Datei in einem brauchbaren Zustand hinterlassen.

    Viele Grüße,
    Robert