Запустите процесс и получите его код возврата или прервите его, если он длится слишком долго.
-
22-09-2019 - |
Вопрос
У меня есть 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 на Контроль над процессом.
Вас также может заинтересовать Шестерен
Извините, что не предоставил код.У меня никогда не было необходимости в средствах управления процессами, поэтому я просто держал в памяти, где искать, на случай, если они мне когда-нибудь понадобятся.