Achtergrond processen

Status
Niet open voor verdere reacties.

Frats

Terugkerende gebruiker
Lid geworden
22 nov 2008
Berichten
4.492
Heb hier een vraag waar ik wel wat andere inzichten voor kan gebruiken ;)

De bedoeling is dat ik een achtergrond proces aanmaak die continu bezig is met vanalles en nog wat. Nu is het zo dat het geheugen van dit proces langzaam vol loopt (niet veel aan te doen, helaas) en dat ie dus uiteindelijk zal stoppen.

Echter het is de bedoeling dat er niet meer dan een fractie van een seconde onderbreking mag zijn voor hij weer opnieuw gestart wordt en verder gaat met werken.

Cronjobs vallen dus af; dat duurt tot max een minuut voor hij verder gaat en dat is veel te lang.

Weet iemand hier andere oplossingen waar ik naar zou kunnen kijken?

Ik ben bezig geweest met Fork maar dat schijnt niet handig te zijn op een webserver, wget gaat wachten tot de input terug is dus dan gaan alle processen vollopen omdat ie recursief aan blijft roepen...
Zit nog te denken aan Exec maar ik vermoed dat het fout gaat als ik in PHP een nieuw PHP proces aan ga maken en dan de oude afstop omdat de oude eigenaar is van de nieuwe...

Tis een beetje een vreemd verzoek denk ik maar het is wel nodig dus als iemand iets weet dan hoor ik het graag :P

Thanks!
 
Ik kan je hier niet mee helpen, maar ben wel érg benieuwd waar het voor dient. :rolleyes:
 
Zo te zien is het hier een beetje de vraag of je daarvoor PHP wilt gebruiken. Wat voor toepassing is het?
 
Onderdeel van een browsergame om op de achtergrond contructie taken e.d. af te handelen zodat dat niet in de gebruikers sessie hoeft.

Punt is dat alle taken die gedaan moeten worden in PHP code zijn, dus we zouden eventueel een heel klein C programma kunnen gebruiken om het aan te sturen maar die zou dan continu PHP processen moeten maken en dan krijgen we een heleboel overhead die we eigenlijk liever niet hebben :(
(We gebruiken een Framework dat we liever niet iedere keer opnieuw inladen)

Eventueel kunnen we een C runner maken die PHP aanschopt, wacht op de output van het programma, en daarna een nieuwe begint... dat idee hebben we al gehad maar het liefst gebruiken we alleen PHP voor het project aangezien dat voor iedereen de voorkeurstaal is.
 
Dus alleen *als* het script stopt moet hij opnieuw opstarten? Misschien denk ik te simpel maar kun je niet een infinite loop maken? Zowel in php als op de console is dat makkelijk te maken. Je moet er dan uiteraard wel rekening mee houden dat je netjes programmeert omdat anders de cpu op 100% gaat lopen met een vastloper of onbereikbare machine tot gevolg.

Wat betreft het vollopen van het geheugen: zorg ervoor dat je alle variabelen weer unset() als je ermee klaar bent en onderzoek eens of het niet handiger is om de boel in bytecode in een cache klaar te zetten (ipv elke keer alles compileren en uitvoeren zoals normaal het geval is).
 
Helaas loop je dan nog steeds het risico dat het programma tegen een fatale fout aanloopt.

Bovendien is het geheugenbeheer van PHP niet perfect, omdat we met objecten werken komt het dus nogal eens voor dat dingen 'blijven hangen' en alles unsetten is heel erg lastig en bijna niet te doen helaas :(
 
Als je die infinite loop in windows(dos)/linux(bash) maakt wordt het php programma meteen weer opnieuw opgestart (er even vanuitgaande dat php afsluit na een fatale fout)
 
Hm. Je bedoelt een bash file met een infinite loop erin, die continu PHP aanroept?

Dat zou misschien nog kunnen werken ja...
 
Ja, dan heb je een minimale downtime wat betreft het script, maar nogmaals - kijk uit met je code om 100% cpu belasting te voorkomen :)

linux (bash) - test.sh
Code:
#!/bin/bash
while [ 1 ]
do
	/usr/lib/cgi-bin/php /var/www/bestaatniet/loop/test.php
done
windows (dos) - test.bat
Code:
@echo off
:HIER
php test.php
goto HIER
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan