Linguaggio C - signal.h (libreria standard gestione segnali)

L'inclusione della libreria standard signal.h consente l'utilizzo delle funzioni per la gestione dei segnali fra processi.

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>

Funzioni riguardanti i segnali

o kill()
o killpg()
o signal()

Riferimenti ad altre librerie

Ulteriori funzioni di gestione dei segnali sono disponibili nelle librerie unistd (interfaccia con il sistema Unix) e wait (attesa della terminazione di un processo).
Per utilizzare le funzioni elencate di seguito, e' necessario includere gli header appropriati, come mostrato nella sinopsi di ogni funzione. Es.:
#include <unistd.h>
#include <sys/wait.h>

Funzioni della libreria unistd.h

o alarm()
o pause()
o sleep()

Funzioni della libreria sys/wait.h

o wait(), waitpid()


Indice-C Indice linguaggio C
Indice librerie Indice librerie C
At Home Umberto Zappi Home Page