Next: Primitive pause()
Up: Recepção de sinais:
Previous: Recepção de sinais:
Primitive signal()
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
Valor de retorno: o valor anterior do manipulador do
sinal, ou SIG_ERR (normalmente -1) quando houver erro.
A chamada de sistema signal() define um novo manipulador
(handler) para o sinal especificado pelo número
signum. Em outras palavras, ela intercepta o sinal
signum. O manipulador do sinal é ''setado'' para
handler, que é um ponteiro para uma função que pode assumir
um dos três seguintes valores:
- SIG_DFL: indica a escolha da ação défaut
para o sinal. A recepção de um sinal por um processo provoca a
terminação deste processo, menos para SIGCLD e
SIGPWR, que são ignorados par défaut. No caso de
alguns sinais, existe a criação de um arquivo de imagem core no
disco.
- SIG_IGN: indica que o sinal deve ser ignorado: o
processo é imunisado contra este sinal. Lembrando sempre que o
sinal SIGKILL nunca pode ser ignorado.
- Um ponteiro para uma função (nome da função): implica na
captura do sinal. A função é chamada quando o sinal chega, e após
sua execução, o tratamento do processo recomeça onde ele foi
interrompido. Não se pode proceder um desvio na recepção de um
sinal SIGKILL pois esse sinal não pode ser interceptado,
nem para SIGSTOP.
Pode-se notar então que é possível de modificar o comportamento de
um processo na chegada de um dado sinal. É exatamente isso que se
passa para um certo número de processos standards do
sistema: o shell, por exemplo, ao receber um sinal SIGINT
irá escrever na tela o prompt (e não será interrompido).
Next: Primitive pause()
Up: Recepção de sinais:
Previous: Recepção de sinais:
Celso Alberto Saibel Santos
2000-11-14