Как вы прерываете процесс после запуска его с помощью exec ()? - PullRequest
2 голосов
/ 24 апреля 2011

Если я запускаю процесс с exec (), как я могу позже завершить этот процесс, скажем, нажав / отправив клавишу «q».Прямо сейчас, когда я выполню процесс, PHP зависнет, пока он не завершится и не вернется.

Ответы [ 4 ]

1 голос
/ 24 апреля 2011
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);

0 голосов
/ 24 апреля 2011

Если я запускаю процесс с помощью exec (), как я могу позже завершить этот процесс, скажем, нажав / отправив клавишу «q».

Вместо использования exec вы можете посмотреть на использование proc_open, для чего необходимо передать массив, указывающий три потока - один для stdin, один для stdout и один для stderr.

Это позволит вам легко вводить ввод в программу во время обработки вывода, не блокируя просто в ожидании его выполнения. Позже вы можете использовать proc_terminate, чтобы жестоко убить его, если это необходимо.

0 голосов
/ 24 апреля 2011

Вы можете использовать pcntl_fork и pcntl_exec для запуска вашей программы и posix_kill для ее завершения.

0 голосов
/ 24 апреля 2011

Если вы хотите, чтобы ваш скрипт завершал работу независимо от того, где выполняется exec, вы можете перенаправить вывод в другой файл,

exec("php dothis.php >> file.log");

Я надеюсь, что это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...