Если я запускаю процесс с exec (), как я могу позже завершить этот процесс, скажем, нажав / отправив клавишу «q».Прямо сейчас, когда я выполню процесс, PHP зависнет, пока он не завершится и не вернется.
function PsExec($commandJob) { $command = $commandJob.' > /dev/null 2>&1 & echo $!'; exec($command ,$op); $pid = (int)$op[0]; if($pid!="") return $pid; return false; }
позже ... exec ("kill -9 $ pid", $ output);
Если я запускаю процесс с помощью exec (), как я могу позже завершить этот процесс, скажем, нажав / отправив клавишу «q».
Вместо использования exec вы можете посмотреть на использование proc_open, для чего необходимо передать массив, указывающий три потока - один для stdin, один для stdout и один для stderr.
exec
proc_open
stdin
stdout
stderr
Это позволит вам легко вводить ввод в программу во время обработки вывода, не блокируя просто в ожидании его выполнения. Позже вы можете использовать proc_terminate, чтобы жестоко убить его, если это необходимо.
proc_terminate
Вы можете использовать pcntl_fork и pcntl_exec для запуска вашей программы и posix_kill для ее завершения.
pcntl_fork
pcntl_exec
posix_kill
Если вы хотите, чтобы ваш скрипт завершал работу независимо от того, где выполняется exec, вы можете перенаправить вывод в другой файл,
exec("php dothis.php >> file.log");
Я надеюсь, что это поможет вам