2015-01-28 5 views
0

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

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

ответ

0

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

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

+0

Я попробую. Но что, если пользователь потерял сессию? =/ – Rick

+0

Я не знаю, как долго работает ваш скрипт. Сохраните время начала и pid в базе данных и очистите его cron каждые несколько минут. – Stony

+0

Я попробовал небольшой пример, но 'exec' не дает pid. Есть ли какая-нибудь другая команда PHP, которая может дать мне эту информацию? – Rick

0

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

Смежные вопросы