Я работаю над сайтом, на котором могут выполняться разные внешние программы в зависимости от выбранной пользователем опции.Один из них занимает более 30 секунд (время, необходимое для сбора данных с датчиков).
Как я могу позволить пользователю остановить выполнение с помощью кнопки на другой странице?
Подробно, я поступаю следующим образом:
Когда пользователь выбрал эту опцию, Ajax-запрос отправляется на сервер:
$('#start_2').click(function(e){
e.preventDefault();
var data="opt="+1+"delay="+$('input[name=delay_acquisition]:checked').val();
$("#main_content").load("../dist/waitingPage.php"); //show countdown during process
$.ajax({
url:'dataProcessing.php',
type:'POST',
data:data,
async: true,
success:function(){
alert("succes start stabilo");
$("#main_content").load("../dist/results.php");
},
error:function(){
alert("The submission encounter an error");
}
});
});
dataProcessing.php:
session_start();
error_reporting(-1);
set_time_limit(20);
$delay = $_POST['delay'];
$_SESSION['delay'] = $delay;
chdir("executables");
//Start acquisition
$cmd = shell_exec("python test.py $delay");
$PID = shell_exec("nohup $cmd > /dev/null & echo $!");
$_SESSION['pid_py'] = $PID;
...
waitPage.php: кнопка обратного отсчета и остановки.
Я попытался выполнить скрипт:shell_exec("sudo kill -s 9 $_SESSION['pid_py']");
и shell_exec("sudo killall python");
Но это не сработало.
Я также пытался открыть процесс в "dataProcessing.php" для использования proc_terminate (), но я нене знаю, возможно ли получить ресурс с другой страницы (по крайней мере, мне не удалось это сделать!)
Я работаю с Xampp в Ubuntu (сервер Apache), если это может помочь.
Спасибо,