Як створити демона в linux, mainloop

В першу чергу викликається функція fork. яка створює копію процесу. У батьківському-процесі функція поверне PID породженого дочірнього процесу, а в дочірньому процесі fork поверне 0.

Виклик setsid створює нову сесію. Створення нової сесії забезпечить нас наступними перевагами: процес стає лідером нової сесії, процес стає лідером нової групи процесів і у процесу немає керуючого терміналу.

chdir ( «/») змінює поточний каталог процесу на кореневої, що б звільнити файлову систему з якої був запущений демон.

Ну і виклик close (stdin). close (stdout). close (stderr) закривають файлові дескриптори стандартного введення і виведення.

Реалізація функції mainloop залежить від від призначення демона, тому код цієї функції тут не наведено.

Скажіть пож. як мені щоб кожні 5 хвилин на сервері виконувалася перевірка, чи існує процес ts3server_linux і якщо його не існує, то виконувалася б команда
/home/teamspeak3-server_linux-x86/ts3server_startscript.sh start
від імені користувача tssrv

Артем Двинин каже:

Можна написати скрипт, який перевіряє чи запущений процес (наприклад так: ps -C ts3server_linux || /home/teamspeak3-server_linux-x86/ts3server_startscript.sh start). І прописати запуск цього скрипта в crontab.

А ще пораджу подивитися в сторону спеціально заточених для цих цілей утиліт, daemontools або runit.

Якщо потрібна більш детальна інформація - пишіть, може зможу допомогти.