Управление внешним процессом с помощью PHP

0

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

Когда пользователь нажимает кнопку для запуска процесса, объект 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?

Теги:

2 ответа

0
Лучший ответ

Когда вы начинаете свой процесс с & процесс работает в фоновом режиме, и вы получаете идентификатор процесса в качестве возврата. Таким образом, вы можете сохранить этот pid в сеансе, например, и убить этот процесс, если это необходимо.

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

  • 0
    Я попытаюсь. Но что, если пользователь потерял сеанс? знак равно
  • 0
    Я не знаю, как долго работает ваш скрипт. Сохраните время запуска и pid в базе данных и очищайте его cron каждые несколько минут.
Показать ещё 2 комментария
0

Возможно, вы должны использовать Cron. Когда пользователь нажал кнопку запуска процесса, php измените, например, значение в mysql. Cron каждую минуту проверяет значение базы данных и может начать процесс.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню