Just an addition to the previous note re: exec('renice...'). The exit_func() will not set the priority back to normal (0) (at least on linux), unless the user that the webserver is running as is a super user (bad idea). You can decrease the priority of the running task, but not increase it again. See man page for renice.
To prevent subsequent requests running at the lower priority I called apache_child_terminate() on shutdown.
proc_nice
(PHP 5)
proc_nice — Ändert die Priorität des aktuellen Prozesses
Beschreibung
proc_nice() änder die Priorität des aktuellen Prozesses um den in increment angegebenen Betrag. Ein positives increment vermindert die Priorität des aktuellen Prozesses, während ein negatives increment die Priorität erhöht.
proc_nice() ist in keinster Weise verwandt mit proc_open() und der dazugehörigen Funktionen.
Parameter-Liste
- increment
-
Der Betrag, um den die Priorität verändert wird.
Rückgabewerte
Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben. Wenn ein Fehler auftritt, zum Beispiel weil der User keine Berechtigung hat, die Priorität eines Prozesses zu ändern, wird ein Fehler der Stufe E_WARNING erzeugt.
Anmerkungen
Hinweis: Verfügbarkeit
proc_nice() existiert nur, wenn Ihr System mit 'nice' umgehen kann. 'nice' ist verfügbar unter: SVr4, SVID EXT, AT&T, X/OPEN, BSD 4.3. Das bedeutet, dass proc_nice() unter Windows nicht verfügbar ist.
proc_nice
13-Aug-2004 01:20
10-Nov-2003 11:34
If you don't have PHP5 and needs to nice your process this works good.
<?php
function proc_nice($priority) {
exec("renice +$priority ".getmypid());
}
//You also need a shutdown function if you don't want to leave your http deamons with a modified priority
function exit_func(){
// Restore priority
proc_nice(0);
}
register_shutdown_function('exit_func');
?>