Ce face pcntl_fork
Funcția pcntl_fork bifurcă procesul PHP curent într-un proces părinte și un proces copil identic (clonează spațiul de adrese în conformitate cu apelul de sistem UNIX fork()). Este nucleul dezvoltării de cozi de mesaje concurente, scripturi CLI de mare viteză și servere de fundal.
| Valoare returnată de pcntl_fork | Semnificație în fluxul de execuție |
|---|---|
-1 |
Eșec: Nu s-a putut crea procesul copil (limite OS de procese atinse). |
0 |
Codul curent rulează în interiorul procesului copil. |
> 0 (un număr întreg pozitiv) |
Codul curent rulează în procesul părinte; valoarea este PID-ul (Process ID) copilului tocmai lansat. |
Exemplu practic: Lansarea unui proces copil în fundal
<?php
$pid = pcntl_fork();
if ($pid === -1) {
die("Eroare critică: Bifurcarea procesului a eșuat!\n");
} elseif ($pid === 0) {
// Suntem în procesul copil:
echo "[Copil PID: " . getmypid() . "] Procesez o sarcină grea de conversie video...\n";
sleep(3);
echo "[Copil PID: " . getmypid() . "] Sarcina finalizată cu succes!\n";
exit(0); // Ieșire obligatorie pentru a preveni rularea codului părintelui
} else {
// Suntem în procesul părinte:
echo "[Părinte PID: " . getmypid() . "] Am lansat procesul copil cu PID: " . $pid . "\n";
echo "[Părinte] Pot continua să deservesc alte cereri fără blocaj!\n";
}
Întrebări & Exemple de Cod:
pcntl_forkAi o nelămurire despre utilizarea comenzii
pcntl_forksau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.