Sven Rautenberg: PHP gestarteter prozess lässt sich nicht beenden!

Beitrag lesen

Moin!

ich habe das problem das ich ein prozess folgendermaßen starte und nichtmehr beendet bekomme!!

Prozesse, die von PHP mit proc_open() gestartet werden, werden in einem Prozess von sh gewrappt. Die PID, die du abfragst, ist die Shell, nicht der eigentliche Prozess. Deswegen killst du auch nur diese Shell, nicht den Prozess.

Das ganze ist in https://bugs.php.net/bug.php?id=39992 etwas genauer aufgedröselt, und definitiv auch mit PHP 5.6 noch immer ein Problem.

Symfony hat eine Wrapper-Klasse für derartige Prozesse, und damit auch ein Problem. Deswegen gibts auf Github dazu dieses "issue": https://github.com/symfony/symfony/issues/5759

Der "Fix" ist, das Kommando mit vorangestelltem "exec" auszuführen. Das vermeidet anscheinend die Wrapper-Shell, die abfragbare PID ist dann die vom tatsächlichen Prozess, und der lässt sich dann auch auf normalem Weg beenden.

$cmd = "sudo python /var/www/test.py &> /dev/null &";

$cmd = "exec sudo python /var/www/test.py &> /dev/null &";

Ich bin mir unsicher wegen sudo, würde auch "sudo exec" in Erwägung ziehen, wenn nötig. Oder am besten ganz auf sudo verzichten. :)

Grüße Sven