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_statusdupă ce procesul s-a terminat și apoiproc_close, pe PHP mai vechi de 8.3. Codul de ieșire era deja „consumat” șiproc_closereturna-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.