У меня есть веб-страница, где я показываю статус некоторых процессов (в таблице, по одной строке для каждого процесса). У пользователя есть возможность запустить процесс или заставить его остановиться.
Когда пользователь нажимает кнопку для запуска процесса, объект JSON отправляется на веб-службу, которая (используя PHP) запускает процесс, как показано ниже:
<?php
$params = json_decode($_POST["object"]);
/** Do something with the params **/
// Start a external process in background (I'm using 'ls' as an example)
exec("ls &", $output);
/** Finish the script **/
Проблема заключается в следующем: этот внешний процесс может занять несколько минут. Поэтому я хотел бы дать возможность остановить его. Я хочу: когда пользователь нажимает кнопку "Стоп", он отправит объект JSON в веб-службу (на том же сервере, конечно), чтобы остановить процесс.
Как отслеживать внешний процесс? Как заставить его остановиться, если необходимо? И как я могу заставить пользователя контролировать его? Возможно ли это в PHP?
Когда вы начинаете свой процесс с &
процесс работает в фоновом режиме, и вы получаете идентификатор процесса в качестве возврата. Таким образом, вы можете сохранить этот pid в сеансе, например, и убить этот процесс, если это необходимо.
Для этого вы можете использовать команду posix_kill. Возможно, вы можете активировать свое событие и отправить другой запрос, чтобы остановить этот процесс.
Возможно, вы должны использовать Cron. Когда пользователь нажал кнопку запуска процесса, php измените, например, значение в mysql. Cron каждую минуту проверяет значение базы данных и может начать процесс.