Daemonizowanie procesu w systemie Linux
Jeżeli możesz popraw ten artykuł według zaleceń, które możesz znaleźć na stronie Artykuły do poprawy. Po dopracowaniu tego tekstu można usunąć ten komunikat.
Daemon – w wielozadaniowych (najczęściej uniksopodobnych) systemach operacyjnych proces, który pracuje w tle bez konieczności interakcji z użytkownikiem - z Wikipedii.
Daemony najczęściej wykorzystuje się przy serwerach sieciowych (np. WWW czy FTP) - pozwala to na ich nieprzerwane działanie w tle będąc zależnym tylko od procesu init.
Żeby program stał się Daemonem musi (nie wszystkie punkty są konieczne):
- Utworzyć proces potomny i przekazać sterowanie do niego (fork)
- Utworzyć nową grupę procesów (setsid)
- Dobrym zwyczajem jest zamknięcie wszystkich deskryptorów plików
- Przekierować standardowe wejście/wyjście w nicość (do /dev/null)
- Stworzyć plik zabezpieczający przez uruchomieniem więcej niż 1 raz (można to zrobić w inny sposób)
- Oraz zająć się obsługą najważniejszych sygnałów
void Daemonize() { int i,lfp; char str[10]; char* LOCK_FILE = "AGate.lock"; if(getppid()==1) return; /* already a daemon */ i=fork(); if (i<0) exit(1); /* fork error */ if (i>0) exit(0); /* parent exits */ /* child (daemon) continues */ setsid(); /* obtain a new process group */ for (i=getdtablesize();i>=0;--i) close(i); /* close all descriptors */ i=open("/dev/null",O_RDWR); dup(i); dup(i); /* handle standart I/O */ umask(027); /* set newly created file permissions */ chdir("/tmp"); /* change running directory */ lfp=open(LOCK_FILE,O_RDWR|O_CREAT,0640); if (lfp<0) exit(1); /* can not open */ if (lockf(lfp,F_TLOCK,0)<0) exit(0); /* can not lock */ /* first instance continues */ sprintf(str,"%d\n",getpid()); write(lfp,str,strlen(str)); /* record pid to lockfile */ signal(SIGCHLD,SIG_IGN); /* ignore child */ signal(SIGTSTP,SIG_IGN); /* ignore tty signals */ signal(SIGTTOU,SIG_IGN); signal(SIGTTIN,SIG_IGN); signal(SIGHUP, SignalHandler); /* catch hangup signal */ signal(SIGTERM, SignalHandler); /* catch kill signal */ }
Za Bułą: http://forum.4programmers.net/viewtopic.php?p=370971
7 komentarzy
flabra - no następny..
kawałki kodu to sobie można na pastebin wrzucać, a jak ktoś nie rozumie to google
na 4p mają być arty reprezentujące jakiś poziom - ten go nie ma
a sam nie poprawiam, bo otarłbym się o dyletanctwo
Co z tego? Ja nadal nie wiem co ten FAQ przedstawia i po co jest. Powiesz, że się nie znam, więc ten FAQ nie jest dla mnie - ale faktem jest, że to właśnie dla osoby, która czegoś nie wie są takie materiały - gdybym wiedział, to bym nie potrzebował.
Sorry. ale wrzucenie kawałka kodu bez ładu i składu mija się z celem.
Ale sorry, zero opisu co ten kod robi, do czego można go wykorzystać.. sama nazwa artykułu <u>nie</u> wystarczy.
Do poprawy
to zamiast narzekac ogarnij sie i popraw jak cie boli. na moj gust kazda linijka jest na tyle dobrze skomentowana, ze nie potrzeba nic wiecej, a jesli czegos nie rozumiesz google -> 'man online' i w manie masz kazda jedna funkcje
Dodałem skromy opis, lecz nie wiem czy jest poprawny - mógłby ktoś bardziej obeznany w temacie to sprawdzić?