У меня есть PHP-скрипт, который использует вызов system()
для выполнения других (потенциально длительных) программ (для интересов: NCBI BLAST, phrap, primer3 и другие программы для анализа и сборки последовательности ДНК).PHP 4 и 5, Ctrl-C, system() и дочерние процессы
Я бегу под 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 и не видел различий в обработке сигналов.
Любые намеки на то, что могло вызвать это, или обходной путь, будут оценены.
Спасибо.
Какое требуемое поведение? – Glomek 2008-10-02 23:10:42