Как мы можем остановить процесс, такой как shell_exec () или exec (), нажатием кнопки envent на другой странице? - PullRequest
0 голосов
/ 24 августа 2018

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

Спасибо,

1 Ответ

0 голосов
/ 24 августа 2018

попробуйте это:

session_start();
set_time_limit(20);

$delay = $_POST['delay'];

chdir("executables");

$PID = shell_exec("python test.py $delay >/dev/null 2>&1 & echo \$!");

$_SESSION['pid_py'] = $PID;

Другое:

session_start();
posix_kill($_SESSION['pid_py'], SIGTERM);
// or
shell_exec("kill {$_SESSION['pid_py']}");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...