Създаване на демон (услуга) в Linux, избие - трикове

Това, което не можеше да си представи, защото това е, което ми работа имам възможност, или по-скоро ще трябва да се напише нещо под Linux. Въпреки това, е настъпило такова събитие. Въпреки факта, че изпълнение на дълга си, аз съм на PHP разработчик (уеб разработчик), I "се предлага" да се напише програма в Ubuntu за началото на проекта. И не само ползата и демон - услугата по Linux. А преди няколко години, този вид проблем може да ме уплаши. Но не и сега. Още повече, че не е необходимо да има конкретна разработка на софтуер под Linux. C ++ компилатор е вече налице. Въпреки това, аз отдавна исках да опитам различни платформи среда за разработка на софтуер за Лазар. Затова реших да се създаде демон на FreePascal.

Така че, тук ще се опитам да покажа пример за създаването на опростена демон Лазар.

Структурата на програмата изглежда точно като обикновена конзола заявление:

Основната идея при създаването на демон е, както следва: да се създаде друг пример за прилагането в паметта и настоящата програма свършва. По този начин демонът започва. За да се приложи този подход се използва функция fpFork. Той създава копие на текущия процес и се връща:

  • PID, ако процесът е създаден успешно;
  • -1, ако възникне грешка, когато процес се създава;
  • 0 ако е копие на процеса (дете).

Така демон старт извършва с помощта на прости операции:

Когато стартирате програмата, ще направите копие на нашия процес, и ако тя е успешна, изходите (спадът в случай друг клон). Детето също започва процеса на работата си, да не влязат в клон случай 0 и следния програмен код. Сега демона влиза в режим готовност и чака сигнал, след което тя се активира и ще извърши определени действия. В най-простия случай, това могат да бъдат подредени в една линия:

Този цикъл ще се изпълни, докато сигналът не идва от унищожение. Сега е необходимо да се научи на демона приемам външни сигнали от операционната система. За да направите това, да създаде функция, която ще обработва сигналите:

И сега се пренасочи обработка на сигнала на тази функция:

Сега, ако ни демон ще получи сигнал за унищожаване на SIGTERM, той ще бъде завършен. Остава да се разработи механизъм за пускане и спиране на демона. Сега разбрах, че това е доста прост начин. Когато демона започва, той проверява параметър премина към него. Ако започнете, вилица, създаване на временна директория daemonname.lock файл и пишете на PID демон. Ако като параметър премина, за да спрете daemonname.lock отворен файл прочетете PID, убиват процеси с ПОУ, извадете файл за заключване. Въпреки това, той вероятно не е най-доброто решение. Ето защо, все още има едно проучване в това отношение.

Пълен демон код: