next up previous
Next: Sinal SIGHUP: tratamento de Up: Os sinais gerados pelo Previous: Tipos de sinal

Tratamento dos processos zumbis

O sinal SIGCLD se comporta diferentemente dos outros. Se ele é ignorado, a terminação de um processo filho, sendo que o processo pai não está em espera, não irá acarretar a criação de um processo zumbi (veja seção 2.2.1)

Exemplo: O programa a seguir gera um processo zumbi quando o pai é informado da morte do filho através de um sinal SIGCLD.

                 /* arquivo test_sigcld.c */

#include <stdio.h>
#include <unistd.h>

int main() {
     if (fork() != 0) while(1) ;
     exit(0);
}

Resultado da execução:

euler:~/> test_sigcld & 
euler:~/> ps
  PID TTY          TIME CMD
  675 pts/0    00:00:00 tcsh
 1038 pts/0    00:00:01 test_sigcld
 1039 pts/0    00:00:00 test_sigcld <defunct>
 1040 pts/0    00:00:00 ps

No próximo programa, o pai ignora o sinal SIGCLD, e seu filho não vai mais se tornar um processo zumbi.

                /* arquivo test_sigcld2.c */

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int main() {
     signal(SIGCLD,SIG_IGN) ;/* ignora o sinal SIGCLD */
     if (fork() != 0)
         while(1) ;
     exit(0);
}

Resultado da execução:

euler:~/> test_sigcld2 & 
euler:~/> s
  PID TTY          TIME CMD
  675 pts/0    00:00:00 tcsh
 1055 pts/0    00:00:01 test_sigcld2
 1057 pts/0    00:00:00 ps

Observação: A primitiva signal() será mais detalhada na seção 3.2.2 do texto.



Celso Alberto Saibel Santos 2000-11-14