Ce face proc_get_status
proc_get_status nu așteaptă procesul, doar îți spune ce face acum. Cheile principale: running (încă rulează), pid, exitcode (-1 cât timp rulează), signaled și termsig (dacă a fost oprit de un semnal și de care).
Se folosește ca să urmărești un proces lung fără să blochezi scriptul: verifici periodic running și faci altceva între timp. Din PHP 8.3, codul de ieșire rămâne disponibil la toate apelurile următoare, iar cheia cached arată că vine din memorie.
Parametri
| Parametru | Descriere |
|---|---|
$process |
Procesul returnat de proc_open. |
Ce returnează
Un tablou cu cheile command, pid, running, signaled, stopped, exitcode, termsig, stopsig și (PHP 8.3+) cached.
Exemple
Exemplul 1: În timpul rulării și după
<?php
$p = proc_open(["sh", "-c", "sleep 0.2; exit 4"], [], $pipes);
$s = proc_get_status($p);
echo "Rulează: " . var_export($s["running"], true) . ", cod: " . $s["exitcode"] . "\n";
usleep(500000);
$s = proc_get_status($p);
echo "Rulează: " . var_export($s["running"], true) . ", cod: " . $s["exitcode"] . "\n";
proc_close($p);
Rezultat
Rulează: true, cod: -1
Rulează: false, cod: 4
Exemplul 2: Aștepți, dar cel mult 2 secunde
<?php
$p = proc_open(["sh", "-c", "sleep 0.3"], [], $pipes);
$start = microtime(true);
while (proc_get_status($p)["running"]) {
if (microtime(true) - $start > 2) {
proc_terminate($p);
exit("Prea lent, l-am oprit");
}
usleep(100000);
}
echo "Gata, cod " . proc_get_status($p)["exitcode"];
proc_close($p);
Rezultat
Gata, cod 0
Greșeli frecvente
- Folosești
pidca să trimiți semnale unui proces pornit printr-o comandă text. Comanda text rulează prinsh -c, iar PID-ul poate fi al shell-ului. Dă comanda ca tablou.
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_close: Așteaptă terminarea unui proces pornit cu proc_open, îl închide și returnează codul lui de ieșire.proc_terminate: Trimite un semnal de oprire unui proces pornit cu proc_open (implicit SIGTERM).