Как дождаться завершения процесса, запущенного с помощью функции proc_open?

Как можно дождаться завершения выполнения процесса, вызванного функцией `proc_open()`, перед тем, как продолжить работу с файлами, созданными этим процессом?
  • 12 мая 2024 г. 23:40
Ответы на вопрос 2
Для ожидания завершения процесса, запущенного с помощью функции `proc_open()`, можно воспользоваться функцией `proc_close()`. Данная функция останавливает процесс и ждет его завершения перед тем, как продолжить выполнение скрипта.

Пример:

```php
// Создаем процесс
$descriptorspec = [
    0 => ['pipe', 'r'],  // stdin
    1 => ['pipe', 'w'],  // stdout
    2 => ['pipe', 'w']   // stderr
];

$process = proc_open('your_command_here', $descriptorspec, $pipes);

if (is_resource($process)) {
    // Читаем вывод процесса
    while (!feof($pipes[1])) {
        echo fread($pipes[1], 1024);
    }

    // Закрываем все каналы
    foreach ($pipes as $pipe) {
        fclose($pipe);
    }

    // Ожидаем завершения процесса
    $exitCode = proc_close($process);

    echo "Процесс завершен с кодом $exitCode\n";

    // Продолжаем выполнение скрипта после завершения процесса
}
```

Этот пример демонстрирует запуск процесса с помощью `proc_open()`, ожидание завершения процесса с помощью `proc_close()` и продолжение выполнения скрипта после завершения процесса.
Так вроде в документации по proc_open() всё и описано. 
while (!feof($pipes[1])) {...};
proc_close($ph);


P.S. Документацию надо чтить!
Похожие вопросы