У меня есть PHP-скрипт, который использует вызов system()
для выполнения других (потенциально длительных) программ (для интереса: NCBI BLAST, phrap, primer3 и другие программы для анализа и сборки последовательности ДНК).
Я работаю под Windows XP, использую версию CLI PHP из командной строки или в качестве службы. (В любом случае я общаюсь с ним через очередь задач в таблице базы данных).
Под PHP4: когда я нажимаю Ctrl + C , сценарий останавливается, и любой дочерний процесс, запущенный в то время, также останавливается.
Под PHP5: когда я нажимаю Ctrl + C , сценарий останавливается, но дочерний процесс остается запущенным.
Аналогично, при запуске сценария как службы остановка службы при запуске его с PHP4 останавливает дочерний процесс, а с PHP5 дочерний процесс продолжает работать.
Я попытался написать минимальное тестовое приложение и обнаружил такое же поведение. Тестовый PHP-скрипт просто использует system () для выполнения программы на C (которая просто спит в течение 30 секунд), а затем ожидает нажатия клавиши.
Я взглянул на исходный код PHP 4.4.9 и 5.2.6, но не увидел различий в коде system (), который выглядел так, как будто это могло вызвать это. Я также быстро взглянул на код запуска приложения CLI и не увидел различий в обработке сигналов.
Будем благодарны за любые подсказки о том, что могло вызвать это, или обойти это решение.
Спасибо.