C/C++

Как на Си правильно создать резидентную программу, то есть "демона"?

Ковырял несколько статей и примеров по созданию приложения-демона средствами языка Си. В целом суть понял. Нужно выполнить примерно несколько операторов:
fork();
setsid();
umask(0);
chdir("/");
close(0);
close(1);
close(2);
exit(0);
А дальше что и как правильно сделать, чтобы созданный демон оставался висеть в системе?
Перепробовал примеры и ни черта не понял. Не совсем понятные и разные объяснения.

Прошу тех, кто шарит в этой теме, скиньте какой-нибудь понятный пример с объяснением каждого шага работы программы.
Привожу пример, который работает на Linux Fedora и на Android(Linux Debian). Тестил на своём телефоне с Android.
#include<sys/types.h>
#include<sys/stat.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<errno.h>
#include<unistd.h>
#include<syslog.h>

int main(void)
{
pid_t pid, sid;

/*Создаем потомка от процесса: */
pid = fork();
if (pid < 0)
{
/*Если pid = -1, то потомок
не создан
*/
exit(EXIT_FAILURE);
}
/* Если pid>0, значит потомок
создан, поэтому завершаем
родительский процесс: */
if (pid > 0)
{
exit(EXIT_SUCCESS);
}

/* Меняем маску доступа к файлам
от демона : */
umask(0);

/* Создаём новую сессию для демона,
в которой он лидер и единственный
процесс в своей группе: */
sid = setsid();
if (sid < 0)
{
exit(EXIT_FAILURE);
}
/* Меняем рабочую папку демона,
если не будем ничего никуда выводить,
и если нужна гарантия работы процесса,
ибо корневая папка не отмонтируется
и не поменяется в процессе работы ОС, но здесь смена папки закоментена, так как мы будем создавать файл ls.txt, доступ для создания в корневой папке отсутствует для приложения юзера: */
/*if ((chdir("/")) < 0)
{
exit(EXIT_FAILURE);
} */

/*Отключаемся от стандартного
ввода, вывода и реакции на ошибки, то есть отключаемся от терминала, чтобы он не управлял демоном: */
close(STDIN_FILENO); //выкл. ввод
close(STDOUT_FILENO);//выкл. вывод
close(STDERR_FILENO);//выкл. ошибки

/* Демон работает в бесконечном
не нагрузном цикле с паузой в теле
кода для снятия нагрузки на процессор: */
while (1)
{
/* Здесь код демона,
например, будем выполнять
каждые пол минуты команду
ls > ls.txt... : */
system("ls > ls.txt");

/*Пауза в теле демона обязательна,
иначе попусту нагружаем комп: */
sleep(30);
}
exit(EXIT_SUCCESS);
}

ИС
Иван Семёнов
37 945
Лучший ответ
Иван Семёнов На скринах программа-демон c99
Нассы под дверь
хлопни в ладоши 6 раз
поспи
и утром под подушкой нечего не будем потомучто ещё не всё
попей воды
сьешь блинчик из какашки таноса
поспи
и все твои вопросы решатся
демон в тебе сидит