Quando / como o Apache mata um processo filho que você gera em PHP?

2

Não tenho certeza se isso é mais apropriado para falha de servidor ou estouro de pilha, mas aqui vai.

Estou usando o mod_php no Apache MPM prefork e gerando um novo processo como:

<?php
exec("/usr/bin/php -f backgroundScript.php &");
?>

Supondo que o novo processo filho do backgroundScript.php seja executado por um longo tempo…

1) O processo PHP pai agora é considerado inativo? Ele retorna ao pool de servidores?

2) Se o Apache matar o processo PHP pai para retornar a MinSpareServers , o backgroundScript.php também será limpo ou continuará sendo executado indefinidamente?

3) Existem outras maneiras que o Apache pode inadvertidamente matar o processo filho backgroundScript.php? service httpd stop talvez?

    
por geofflee 17.08.2013 / 03:00

1 resposta

4

Você deseja executar o aplicativo em segundo plano e esquecer?

há muitos posts sobre isso no php.net

Além disso, observe a partir do homem executivo:

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.

mesmo aqui e aqui e aqui etc

Eu tenho um código feio, violando essas regras:

<?php
echo "pre";
exec("someuglylongandworkingthingwithoutput &");
echo "post";
?>

Apenas testei na minha caixa fedora com o padrão apache + php (prefork + module), eliminei processos com killall -9 / usr / sbin / httpd

  1. apesar de & - não, não, ainda é considerado em execução. meu aplicativo de segundo plano ainda está em execução
  2. de acordo com o meu teste acima - continuará
  3. depende de como o script init encerra o apache, mesmo de acordo com p 1.

Depois de adicionar /dev/null - tudo está bem, o ID do processo pai é "1".

    
por 17.08.2013 / 03:28