Ha Linuxon PHP-CLI-ben egy scripten belül egyidőben szeretnénk több kódrészletet futtatni, akkor a

pcntl_fork();

funkcióra van szükségünk. Egy nagyon egyszerű példa, ahol a 'szülő folyamat' 5, a 'gyermek folyamat' pedig 2 másodpercenként írja ki a nevét [ennek semmi értelme nincs, de a demonstrálás érdekében valamit ki kellett találni. Maga a fork tökéletes például Socket-ek használatakor]:

<?php
$pid = pcntl_fork();

if ($pid == -1) {
 die("Fork hiba\n"); // ha a PID -1, akkor a fork közben hiba történt, nem tudunk gyermekfolyamatot létrehozni
} else if ($pid) {
// Szülő folyamat

while (true)
{
echo "[Szülő] "; sleep(5);
}

} else {
// Gyermek folyamat

while (true)
{
echo "[Gyermek]"; sleep(2);
}

}
?>

Figyelem: csak UNIX rendszereken működik!

Harder

Harder

Profil

Korábbi hozzászólások (4)

A régi blogon érkezett hozzászólások archívuma. Új hozzászólást már nem lehet írni.

  1. Festő

    hy.
    Valaki tud mondani egy kicsit reálisabb felhasználási lehetőséget erre?
    Mert nem túl tiszta, hogy mikor szükséges ez.

  2. balintx

    http://hu.php.net/manual/en/function.pcntl-fork.php#79439
    Esetleg.
    Vagy egy socketes scriptnél, ahol az usertől várunk adatot, de közben a serverről jövő adatokat is fel kell dolgoznunk. Ez esetben a gyermekfolyamat lehet az input (http://www.tutorial.hu/php-cli-felhasznaloi-adatbevitel/), a szülő pedig a processer :)

    Amúgy én kérek elnézést a példáért.

  3. Festő

    Köszi :)

  4. Borni74

    Sziasztok!

    Lehet egy kérésem?
    Engem annyiban érdekelne a téma, hogy egy online játékomhoz kellene olyan, hogy ha a felhasználó kilép, akkor a háttérben még az elkezdett folyamatok, építés idejének számolása, itd. tovább fussanak. Belépéskor pedig a változásokat vissza is kapja.

Van hozzáfűznivalód? Írj nekem közvetlenül.

Kapcsolat