Indietro Indice Home PHC Avanti


Ignorare i segnali

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.



Antonio Messina
2000-03-17