Crearea unui demon (serviciu) în Linux, este respinsa cu varful - trucuri

Ceea ce nu am putut imagina, pentru că e ceea ce munca mea am posibilitatea, sau mai degrabă va trebui să scrie ceva sub Linux. Cu toate acestea, a avut loc un astfel de eveniment. În ciuda faptului că linia de taxe, eu sunt dezvoltator PHP (web developer), am „oferit“ pentru a scrie un utilitar în Ubuntu pentru începutul proiectului. Și nu doar utilitatea și daemon - serviciul de sub Linux. Un cuplu de ani în urmă, acest tip de problemă ar putea să mă sperie. Dar nu acum. cu atât mai mult, deoarece nu este necesar să se aibă de dezvoltare de software specific sub Linux. compilator C ++ este deja disponibil. Cu toate acestea, am vrut mult timp pentru a încerca cross-platform mediu de dezvoltare de software pentru Lazăr. Așa că am decis să creeze un demon pe FreePascal.

Deci, aici voi încerca să arate un exemplu de a crea un simplu demon Lazăr.

Structura programului arata la fel ca o aplicație consolă obișnuită:

Ideea principală la crearea unui daemon este după cum urmează: pentru a crea o altă instanță a cererii în memorie și programul curent se încheie. Astfel începe demonul. Pentru a pune în aplicare această abordare este folosită funcția fpFork. Se creează o copie a procesului actual și revine:

  • PID, în cazul în care procesul este creat cu succes;
  • -1, în cazul în care apare o eroare atunci când este creat un proces;
  • 0 în cazul în care este o copie a procesului (copil).

Astfel start daemon efectuată prin intermediul unor operații simple:

Când executați programul, vom face o copie a procesului nostru, iar în cazul în care este de succes, ieșirile (scăderea ramură else de caz). Copilul începe, de asemenea, procesul de munca sa, obținerea într-un caz de ramură 0 și următorul cod de program. Acum demonul intră în modul de așteptare și așteaptă un semnal, după care este activat și va efectua anumite acțiuni. In cel mai simplu caz, acest lucru poate fi aranjat într-o buclă:

Această buclă va executa până când semnalul nu vine la distrugere. Acum este necesar să se învețe demonul acceptă semnale externe de la sistemul de operare. Pentru a face acest lucru, creați o funcție care va procesa semnalele:

Și acum să redirecționeze procesarea semnalului pe această funcție:

Acum, în cazul în care demonul nostru va primi un semnal cu privire la distrugerea SIGTERM, va fi finalizat. Rămâne să elaboreze un mecanism pentru a porni și opri daemon. Acum am realizat acest lucru este un mod destul de simplu. Când începe daemon, acesta verifică un parametru a trecut la acesta. Dacă începe, bifurcație, crearea unui fișier temporar director daemonname.lock și scrie demon pid. Dacă ca parametru a trecut pentru a opri daemonname.lock fișier deschis citit pid, ucide procesul cu pid, eliminați de blocare fișier. Cu toate acestea, nu este, probabil, cea mai bună soluție. Prin urmare, există încă un studiu în acest sens.

Cod demon: