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
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.
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.
Van hozzáfűznivalód? Írj nekem közvetlenül.
Kapcsolat