oktatas:linux:demon_programozasa
Tartalomjegyzék
Démon programozás
- Szerző: Sallai András
- Copyright © Sallai András, 2018
- Licenc: GNU Free Documentation License 1.3
- Web: https://szit.hu
A démonkészítés lépései
- gyermek folyamat létrehozása (fork)
- a fájlmód mask-ról umask-ra állítása,
- hogy a démon írhasson az általa létrehozott fájlokba
- naplófájl megnyitása írásra
- munkamenet azonosító létrehozása
- Session ID (SID)
- a gyermekfolyamatnak szükség van a kerneltől egy ilyen démon azonosítóra
- másként árva lesz a gyermekfolyamat
- az aktuális munkakönyvtár biztonságos helyre váltása
- olyan könyvtárra kell állítani ami biztosan mindig létezik a Linuxos rendszerben
- a gyökér mindig létezik
- bezárjuk a szabványos fájlleírókat
- biztonsági kockázat ha nyitvamard
- a démon úgy sem tudja használni
- a démon tevékenységének kódja
Linux démon forrása
Az alábbi mintaprogram Devin Watson munkája. BSD licenc alatt terjeszthető.
- demon.c
#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> #include <string.h> int main(void) { /* Our process ID and Session ID */ pid_t pid, sid; /* Fork off the parent process */ pid = fork(); if (pid < 0) { exit(EXIT_FAILURE); } /* If we got a good PID, then we can exit the parent process. */ if (pid > 0) { exit(EXIT_SUCCESS); } /* Change the file mode mask */ umask(0); /* Open any logs here */ /* Create a new SID for the child process */ sid = setsid(); if (sid < 0) { /* Log the failure */ exit(EXIT_FAILURE); } /* Change the current working directory */ if ((chdir("/")) < 0) { /* Log the failure */ exit(EXIT_FAILURE); } /* Close out the standard file descriptors */ close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); /* Daemon-specific initialization goes here */ /* The Big Loop */ while (1) { /* Do some task here ... */ sleep(30); /* wait 30 seconds */ } exit(EXIT_SUCCESS); }
Fordítás:
gcc -o demon demon.c
Futtatás:
./demon
Leállítás:
kiallall demon
</code>
Egyszerű fájlba író démon
- demon.c
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> int main(int argc, char* argv[]) { FILE *fp= NULL; pid_t pid = 0; pid_t sid = 0; int i = 0; pid = fork();// új folyamat elágaztatása if (pid < 0) { printf("elágaztatás sikertelen!\n"); exit(1); } if (pid > 0) { // a szülőfolyamat printf("A gyermekfolyamat azonosítója: %d \n", pid); exit(0); //A szülőfolyamat sikeres befejezése } umask(0);//fájlmód beállítása sid = setsid();//új munkamenet beállítása if(sid < 0) { exit(1); } close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); fp = fopen ("naplo.txt", "w+"); while (1) { sleep(1); fprintf(fp, "%d", i); fflush(fp); } fclose(fp); return (0); }
Fordítás:
gcc -o demon demon.c
Futtatás:
./demon
Forrás
oktatas/linux/demon_programozasa.txt · Utolsó módosítás: 2019/08/16 21:30 szerkesztette: admin