PHP скрипт в отдельном потоке? как посмотреть id выполняемого приложения, запускаемого через пхп в windows?
(и linux тоже) сейчас делаю через
exec('start /B cmd /S /C "'.$command.'"');
пробовал через
if ( is_resource( $prog = proc_open($runPath, $descriptorspec, $pipes, $startDir, NULL) ) )
{
//Get Parent process Id
$ppid = proc_get_status($prog);
$pid=$ppid['pid'];
но во втором случае и пид не выдает и процесс криво запускает.. т.е. запуск команды вроде как происходит, но то-ли процесс зависает то-ли еще что-то... команда начинает выполняться, но не до конца.
Т.е. хотелось бы получать pid сразу после запуска команды и до ее выполнения. Чтобы потом можно было ждать и смотреть статус выполнения команды.

21 Авг 2019 в 06:54
234 +1
0
Ответы
1

Вам следует использовать функцию proc_open() вместо exec() для запуска процесса в отдельном потоке. Ниже пример PHP кода, который позволяет запустить процесс в отдельном потоке и получить его идентификатор (PID) на Windows и Linux:

$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("pipe", "w") // stderr
);
$command = "your_command_here";
$process = proc_open($command, $descriptorspec, $pipes);
if (is_resource($process)) {
$status = proc_get_status($process);
$pid = $status['pid'];
echo "PID of the running process is: " . $pid . "\n";
// Для получения статуса выполнения команды можно использовать функцию proc_get_status
// Например, чтобы дождаться завершения процесса:
/*while (proc_get_status($process)['running']) {
usleep(100000); // Подождать 0.1 секунды
}*/
// Закрыть все каналы
fclose($pipes[0]); // stdin
fclose($pipes[1]); // stdout
fclose($pipes[2]); // stderr
// Закрыть процесс
proc_close($process);
} else {
echo "Failed to open process\n";
}

При запуске команды через proc_open(), PID процесса будет доступен сразу после запуска команды your_command_here. Для получения статуса выполнения команды, вы можете использовать функцию proc_get_status() в цикле, который будет опрашивать статус процесса до его завершения.

Не забудьте добавить обработку ошибок и проверку на успешное выполнение функций для надежной работы скрипта.

20 Апр 2024 в 13:11
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир