[PHP] Shell_Exec child processes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig met het bouwen van een web interface welke gebruik maakt van een aantal executables. Deze roep ik op dit moment aan via shell_exec(). Vooralsnog geen probleem, werkt als een zonnetje. Maar ik heb krijg een probleem wanneer een gebruiker bv. en pagina een refresh geeft.

Of het nu aan PHP ligt, of aan Apache; ik heb geen idee. Het probleem is dat het lijkt alsof Apache blijft wachten met het laden van de pagina totdat het process wat gestrart is, klaar is. Wanneer ik dat process kill, laadt de nieuwe pagina ineens wel.

Ik heb al geprobeerd een script te schrijven welke kijkt of er op dat moment al een process draait, maar de pagina wordt niet geladen, aangezien er al een process draait.

Is iemand hier wel eens tegenaan gelopen? Of liever: heeft iemand hier een oplossing voor?

Acties:
  • 0 Henk 'm!

  • Shagura
  • Registratie: Augustus 2001
  • Laatst online: 14-09 08:25
Ik denk dat het probleem is dat de executable relatief lang duurt en je script lang moet wachten op de output. Als je script niks naar de browser stuurt dan weet hij niet dat er geen connectie meer is en blijft hij (met je executable) draaien.

Ik weet niet of je executable bij elke request moet worden aangeroepen, welke output je ervan wil of dat je hem gewoon wil laten draaien bij een request, maar je zou kunnen proberen om de exe asynchroon te laten draaien van je script. Bij elke request kan je dan kijken of de process nog draait (voor de huidige session misschien?) en deze al dan niet starten. De output van je process kan je desnoods naar een file laten schrijven en uitlezen.

Hier staat er ook nog wel meer over in ieder geval:
http://stackoverflow.com/...hronous-shell-exec-in-php
http://stackoverflow.com/...4/does-php-have-threading
http://stackoverflow.com/...-background-process#45966

[ Voor 7% gewijzigd door Shagura op 23-07-2009 17:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm... ik heb nog meer Googling gedaan. Ik ben even het URL kwijt, maar blijkbaar is dit een bug van PHP. Wanneer je sessies gebruikt en shell_exec, krijg je een lock op je session-file. (hierdoor doet je sessie vervolgens niets meer totdat je process afgerond is).

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 18-09 17:57
Verwijderd schreef op donderdag 23 juli 2009 @ 15:16:
Is iemand hier wel eens tegenaan gelopen? Of liever: heeft iemand hier een oplossing voor?
Voor zover ik weet geen bug in PHP: in de documentatie staat al dat het resultaat van het aangeroepen programma teruggegeven wordt aan PHP. Ergo, zolang het programma nog niet klaar is zal PHP wachten (en daarmee Apache) tot het verder kan.

Een simpele oplossing is om exec te gebruiken en de output naar een bestand te pipen - dan gaat je script gewoon verder :)
Note: If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.

[ Voor 17% gewijzigd door FragFrog op 24-07-2009 14:37 ]

[ Site ] [ twitch ] [ jijbuis ]