Hallo,
Ich verwende die Process-Klasse aus einem Beitrag in der PHP.net Function Reference. Siehe
http://ch.php.net/manual/de/function.exec.php#88704
Herzstück der Klasse ist die Funktion runCom(), welche einen unabhängigen Prozess starten kann.
PHP-Code:
private function runCom(){
$command = 'nohup '.$this->command.' 1> /dev/null 2>&1 & echo $!';
exec($command ,$op);
$this->pid = (int)$op[0];
}
Der Befehlssyntax
Code:
nohup INDIPENDENTCMD 1> /dev/null 2>&1
scheint richtig zu sein. Nohup startet einen, vom Parent-Prozess unabhängigen, Prozess. Der Standard- und Error-Output werden richtig umgeleitet. Kurz: Der Befehl funktioniert auf Shell-Ebene (Prozess x starten - Parentprozess {Shell} Y schliessen -> Prozess x läuft weiter).
Wenn der Befehl jedoch mit PHP-Exec() ausgeführt wird, beendet sich dieser, sobald das Skript endet d.h. der PHP-Interpreter beendet wird.
Für mich ist unverständlich, warum ein der Befehl direkt im System funktioniert und mit PHP ausgeführt nicht unabhängig vom Parentprozess gestartet werden kann.
Habe ich etwas übersehen? Erfahrungen?
Danke
PS: Man könnte das Command auch in ein Shell-Skript auslagern. Das funktioniert, ist aber sicher nicht Sinn und Zweck einer Process Class.