Запустите процесс и получите его код возврата или прервите его, если он длится слишком долго.

StackOverflow https://stackoverflow.com/questions/1999580

Вопрос

У меня есть PHP-скрипт, запускаемый из командной строки (он же режим CLI, без участия веб-сервера).

В этом скрипте я запускаю команду, которая запускается через некоторое время и обычно завершается через пару минут.Но иногда эта команда работает часами из-за различных проблем, и лучшее, что я могу сделать, это закрыть ее и подождать некоторое время, прежде чем запускать снова.

Две вещи, которые я хочу подчеркнуть:

  • Я не могу контролировать код внутри этой команды и не могу улучшить обнаружение сбоев.
  • Это не важная задача, и совершенно нормально, что она работает таким образом.

При этом я хотел бы улучшить свой код, чтобы я мог завершить дочерний процесс, если команда выполняется более N секунд.Но я все еще хочу получить код возврата от команды, когда она работает нормально.

Псевдокод должен быть примерно таким:

Launch command
While command is running
{
    If the command is done running
    {
        echo return code
    }
    else
    {
        If the command has been running for more than N seconds
        {
            Kill the child process
        }
    }
}

Как бы вы реализовали это на PHP?

Спасибо !

Решение :В итоге я использовал сигнал SIG_ALERT.Дополнительную информацию об обработке сигналов и библиотеке pcntl см. страницы предоставлены Гордоном в его пост.

Это было полезно?

Решение

Прочитать эта глава из Практическое программирование PHP.Он широко охватывает взаимодействие с процессами.А также взгляните на страницы руководства PHP на Контроль над процессом.

Вас также может заинтересовать Шестерен

Извините, что не предоставил код.У меня никогда не было необходимости в средствах управления процессами, поэтому я просто держал в памяти, где искать, на случай, если они мне когда-нибудь понадобятся.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top