Не уверен, что это больше подходит для сбоя сервера или переполнения стека, но начнем.
Я использую mod_php в предварительном форке Apache MPM и создаю новый процесс, например:
<?php
exec("/usr/bin/php -f backgroundScript.php &");
?>
Предполагая, что новый дочерний процесс backgroundScript.php выполняется в течение длительного времени ...
1) Считается ли родительский процесс PHP простаивающим? Он возвращается в пул серверов?
2) Если Apache убивает родительский процесс PHP, чтобы вернуться к MinSpareServers
, будет ли backgroundScript.php также очищен или будет продолжать работать бесконечно?
3) Есть ли другие способы, которыми Apache может непреднамеренно убить дочерний процесс backgroundScript.php? service httpd stop
возможно?
Вы хотите запустить приложение в фоновом режиме и забыть?
на php.net есть много сообщений об этом
Также, заметка от руководителя:
Примечание:
Если программа запускается с этой функцией, для продолжения работы в фоновом режиме вывод программы должен быть перенаправлен в файл или другой поток вывода. В противном случае PHP зависнет до завершения выполнения программы.
У меня ужасный код, нарушающий эти правила:
<?php echo "pre"; exec("someuglylongandworkingthingwithoutput &"); echo "post"; ?>
Только что протестировал на моей коробке Fedora со стандартным apache + php (prefork + module), я убил процессы с помощью killall -9 / usr / sbin / httpd
&
- нет, все еще считается запущенным. мое фоновое приложение все еще работаетПосле добавления /dev/null
- все нормально, id родительского процесса "1".