proc_get_status în PHP

Returnează starea unui proces pornit cu proc_open: dacă mai rulează, PID-ul, codul de ieșire, semnalul care l-a oprit.

Sintaxă
proc_get_status($process): array

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 pid ca să trimiți semnale unui proces pornit printr-o comandă text. Comanda text rulează prin sh -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).