proc_close în PHP

Așteaptă terminarea unui proces pornit cu proc_open, îl închide și returnează codul lui de ieșire.

Sintaxă
proc_close($process): int

Ce face proc_close

proc_close așteaptă ca procesul să se termine, eliberează resursa și returnează codul de ieșire: 0 pentru succes, altă valoare pentru eroare. Dacă procesul a fost oprit de un semnal (de exemplu cu proc_terminate), returnează -1.

Înainte de apel, închide canalele deschise către proces. Altfel procesul poate aștepta încă date de la tine, iar proc_close așteaptă după el.

Parametri

Parametru Descriere
$process Procesul returnat de proc_open.

Ce returnează

Codul de ieșire al procesului sau -1 la eroare.

Exemple

Exemplul 1: Succes sau eroare

<?php
foreach (["exit 0", "exit 5"] as $comanda) {
    $p = proc_open($comanda, [], $pipes);
    echo "$comanda -> cod " . proc_close($p) . "\n";
}

Rezultat

exit 0 -> cod 0
exit 5 -> cod 5

Exemplul 2: Canalele închise înainte

cat se termină doar când intrarea lui este închisă. Fără fclose($pipes[0]), proc_close ar aștepta la nesfârșit.

<?php
$p = proc_open(["cat"], [0 => ["pipe", "r"], 1 => ["pipe", "w"]], $pipes);
fwrite($pipes[0], "Comanda 101 a fost livrată\n");
fclose($pipes[0]);

echo stream_get_contents($pipes[1]);
fclose($pipes[1]);

var_dump(proc_close($p));

Rezultat

Comanda 101 a fost livrată
int(0)

Greșeli frecvente

  • Apelezi proc_get_status după ce procesul s-a terminat și apoi proc_close, pe PHP mai vechi de 8.3. Codul de ieșire era deja „consumat” și proc_close returna -1. Din PHP 8.3 codul este păstrat.

Comenzi înrudite

  • proc_open: Pornește un proces cu control complet: canale separate pentru intrare, ieșire și erori, director și variabile de mediu proprii.
  • proc_get_status: Returnează starea unui proces pornit cu proc_open: dacă mai rulează, PID-ul, codul de ieșire, semnalul care l-a oprit.
  • proc_terminate: Trimite un semnal de oprire unui proces pornit cu proc_open (implicit SIGTERM).
  • popen / pclose: Pornește o comandă și returnează un stream din care citești ieșirea ei sau în care îi scrii date; pclose o închide.