Un processo puo' ricevere un segnale sia al verificarsi di un evento
hardware che software.
I segnali derivanti dagli eventi hardware sono generati internamente
dal sistema come ad esempio avviene per una eccezione sul calcolo in
floating-point, oppure per un intervento dell'operatore quando preme
i tasti <ctrl>C per interrompere un programma in
esecuzione.
I segnali derivanti dagli eventi software sono generati dai processi
per mezzo di funzioni specifiche a tale scopo, come ad esempio le funzioni
kill(), killpg(), alarm(). Inoltre, sfruttando tali
funzioni, sono disponibili dei comandi che introdotti da tastiera inviano
dei segnali a dei processi individuati (tipicamente per Unix un
tale comando e' kill). Anche la terminazione di un processo
genera un segnale: infatti il processo che termina invia al padre il
segnale SIGCHLD.
Un processo puo' intercettare e gestire un segnale tramite la funzione signal().
Di seguito sono riportati i principali segnali presenti nella versione POSIX di Unix.
Segnale | Azione di default | Note |
---|---|---|
SIGHUP | Termina il processo | Hangup del terminale di controllo. Spesso viene effettuata la reinizializzazione del processo |
SIGINT | Termina il processo | Interruzione da tastieara (^C) |
SIGQUIT | Termina il processo | Uscita da tastiera (^\) |
SIGILL | Termina il processo | Istruzione illegale |
SIGABRT | Termina il processo effettuando la core dump | Segnale di abort generato dalla funzione abort() |
SIGFPE | Termina il processo effettuando la core dump | Eccezione floating point |
SIGKILL | Termina il processo | Segnale di Kill. Il segnale non puo' essere ne' catturato ne' ignorato |
SIGSEGV | Termina il processo effettuando la core dump | Riferimento di memoria invalido |
SIGPIPE | Termina il processo | Broken pipe: scrittura alla pipe senza processi consumatori |
SIGALRM | Termina il processo | Segnale generato dalla funzione alarm() |
SIGTERM | Termina il processo | Segnale di terminazione |
SIGUSR1 | Termina il processo | Segnale 'user-defined 1' |
SIGUSR2 | Termina il processo | Segnale 'user-defined 2' |
SIGCHLD | Ignora il segnale | Il child process e' terminato o e' fermo |
SIGCONT | Se il processo e' fermo, il processo riprende | |
SIGSTOP | Ferma il processo | Ferma il processo. Il segnale non puo' essere ne' catturato ne' ignorato |
SIGTSTP | Ferma il processo | Stop dato da una tty (^Z) |
SIGTTIN | Ferma il processo | tty input per un processo in background |
SIGTTOU | Ferma il processo | tty output per un processo in background |
Per utilizzare la libreria standard signal.h e' necessario includere l'header signal.h nel file sorgente:
#include <signal.h>
#include <unistd.h>
#include <sys/wait.h>
Indice linguaggio C |
Indice librerie C |
Umberto Zappi Home Page |