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!
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.
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.
Köszi :)
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.