4. Óra Pipe
Fileok fordítása
gcc -Wall -Werror=vla -pthread -lrt -std=c11 -pedantic -o a.out ./signal.c && ./a.out OS/X-en pedig:
clang -Wall -Werror=vla -pthread -std=c11 -pedantic -o a.out ./signal.c && ./a.out Óra Outline
- Mik a Signal-ok?
- hogyan küldünk signaolokat
Signal / signal.c -
killablekill -s SIGSEGV 441 - stty -e
- rendes signalok
Signal / sigaction.c -
kill.c/ errno
Signalok
SIGINTCtrl CSIGTERMhagyományos leállásSIGSTOP- nem fedhetőSIGKILL- nem fedhetőSIGSEGV- Szegmentációs hiba
Kód lefolyása signal esetén
Signal Küldés
PID = Process ID, a proessz egyedi azonosítója Például a szülő program megölése:
pid_t pid = getppid();
kill(pid,SIGTERM);Signal Handler (sigaction)
Egy nem ‘elkapott’ signal leállítja a processt. Ahhoz, hogy egy process lekezelje a signalt, a következőt kell beállítani:
void handler(int signumber) {
printf("[handler] %i\n", signumber);
}
struct sigaction sigact;
sigact.sa_handler = handler;
sigemptyset(&sigact.sa_mask);
sigact.sa_flags = 0;
sigaction(SIGTERM, &sigact, NULL);Itt a SIGTERM signal nem leálltja az alkalmazást, hanem meghívja a handlert. Miután a handler lefutott, folyik a
program futása.
Vannak signalok, amiket nem lehet ‘elkapni’, ilyen pl a SIGKILL.