У меня есть веб-страница, где я показываю состояние некоторых процессов (в таблице по одной строке для каждого процесса). У пользователя есть возможность запустить процесс или заставить его остановиться.
Когда пользователь щелкает, чтобы запустить процесс, объект 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. Крон каждую минуту проверяет значение базы данных и может начать процесс.