Демон создаеться путем создания копии процесса(ну fork() тоесть) и убивания предка. Дочерний процесс уходит в фоновый режим, если родительский был запущен из шелла. Он наследует идентификатор группы процессов, но получает свой собственный pid, так что для того чтобы сделать его главным надо вызвать еще функцию setsid()
Культурные программисты правда создают два форка - чтобы процесс не смог получить управляющий терминал. Для этого еще надо проигнорить SIGHUP, так как первый форк когда завершаеться посылает всем своим детям SIGHUP.
Вот простенький листинг:
void daemon_init(void) {
pid_t pid;
if ( (pid = fork()) != 0 )
exit(0);
setsid();
signal(SIGHUP, SIG_IGN);
if ( (pid = fork()) != 0 )
exit(0);
chdir("/");
umask(0);
}
Грубо говоря вот так.
А вобще все это очень хорошо документировано.
И лучше не пытаться дружить с юниксом через Кыликс :) - тока поссориться можно.
Good luck!