Indietro | Indice | Home PHC | Avanti |
Alcuni segnali, lo abbiamo accennato, possono essere ignorati. La relativa chiamata è: signal(<segnale>, SIG_IGN);
Per esempio il programma:
#include <signal.h> main(){ signal(SIGHUP, SIG_IGN); signal(SIGTERM, SIG_IGN); signal(SIGSTOP, SIG_IGN); signal(SIGKILL, SIG_IGN); /* questo non puo' essere ignorato !*/ signal(SIGPIPE, SIG_IGN); while(1) ; }
ignora molti segnali. Siccome ignora il segnale SIGHUP se chiudo la shell che lo ha generato invece di morire diventerà un nuovo session leader e apparirà come figlio di init. Se inoltre lancio il comando kill il processo non morirà, ma sarà necessario kill -9 5
Un altro esempio di programma:
#include <signal.h> main(){ char c; signal(SIGHUP, SIG_IGN); while(1) c=getchar(); }
Questo processo non potrà continuare a girare in background perché tenta continuamente di leggere da standard input (la tastiera), e quindi resterà in stato di ``stopping''. Se però chiudiamo la shell che lo ha generato, siccome ignora il segnale SIGHUP non muore, anche se in futuro non potrà mai leggere da tastiera.