Többszörös démonok php - Leonid Shevtsov
Előbb vagy utóbb jön a helyszínen végeznek feladatokat, amelyek közvetlenül az oldalon, hogy jól semmilyen módon nem működik. Kezelni a nagy mennyiségű adat. Igényel lassú külső szolgáltatások. Ehhez bonyolult számításokat.
És akkor azt kell megjegyezni, hogy a PHP - nemcsak az elpárologtató honlapokat, hanem egy teljes értékű programozási nyelv. Legyen ez a nyelv démon elvégzésére háttér feladatokat.
- PID - a folyamat ID. Egyedülálló, hogy a jelen pillanatban pozitív szám.
- pcntl - PHP kiterjesztés gyermekekkel dolgozó folyamatokat. Füst utasítás.
- posix - PHP kiterjesztés dolgozik a POSIX funkciók. Füst utasítás.
Ha kérdése van az egyes funkciója ismeretlen - ne aggódj! Ezek mind dokumentálva a PHP Manual. Nem valószínű, hogy fogok beszélni velük egyre érdekesebb.
Elágazás (magzati folyamatok)
Hogyan lehet két azonos folyamat? A programozók a Windows alatt (köztük én is) jobban ismeri a rendszert, ha írunk egy függvényt, amely lesz main () a gyermek menet. A Linux, ez nem így van, mert van egy kis beszélni ez a rendszer több process. A Linux-felhasználók nyugodtan kihagyhatjuk ezt a szakaszt, ha már tud mindent.
Szóval Létezik egy funkció pcntl_fork. Ez két dolgot tesz: másolni az összes lefoglalt memória az aktuális folyamat kezdődik egy másik folyamat ugyanazon a helyen, ahol idézték, de egy új példányt az adatokat.
Így, miután pcntl_fork mi marad két azonos szkript fut.
Ha egyszerűen illessze be pcntl_fork script. semmi nem jelenik meg a vizuális, kivéve, hogy a konfliktusok erőforrásokhoz való hozzáférés. Ezért pcntl_fork 0értéke a gyermek folyamat és a gyermek folyamat PID - szülő. Ez megfelel a szokásos módja a pcntl_fork:
By the way, pcntl_fork csak akkor működik a CGI és CLI -rezhimah. Alól az Apache - lehetetlen. Logikus.
démonizálása
Démonizálni a forgatókönyvet, meg kell szüntetnie a konzolból, és tegye be egy végtelen ciklusba. Lássuk, hogyan kell ezt csinálni.
Miután ezeket az intézkedéseket, marad nekünk egy démon - a program nélkül konzolt. Hogy nem fejezte végrehajtása azonnal engedte végtelen ciklusba (majdnem)
utódfolyamatok
Abban a pillanatban, a démon odnoprotsessovy. A különböző Érthető okokból ez nem lesz elég. Fontolja meg a gyermek folyamatokat.
jelfeldolgozás
A következő legfontosabb feladat - amely jelfeldolgozás. Most a démon nem tud semmit a külvilág felé, és megölni csak az a folyamat befejezése ölni -SIGKILL. Ez rossz. Ez elég rossz - SIGKILL megszakítja folyamatok a közepén. Emellett nem lehet továbbítani az információkat.
Van egy csomó érdekes jeleket lehet feldolgozni, de fogunk összpontosítani SIGTERM - jel korretnogo leállás.
Ez minden. Mi elkapjam a jel, meg egy zászló a forgatókönyvet, és ezt a zászlót, hogy nem indul el az új szálak és teljes az alapvető ciklust.
Fenntartása különleges démon
És az utolsó érintés. Szükséges, hogy a démon nem fut kétszer. Általában erre a célra használt úgynevezett pid-file: file A rögzített pid az adott démon, ha fut.
Miután démonizálása kell írni az aktuális PID démon pid-állományt.
Ez minden, amit tudnod kell az írás démonok PHP. Én nem beszélek a források megosztása, mert ez a probléma szélesebb, mint az írás démonok.