Next: Lista de Sinais em
Up: Os sinais
Previous: Controle da progressão de
A exceção de SIGCLD, os sinais que são recebidos por um
processo não são memorizados: ou eles são ignorados, ou eles põem fim
na execução dos processos, ou ainda eles são interceptados e tratados
por algum procedimento. Por esta razão, os sinais não são apropriados
para a comunicação interprocessos... Uma mensagem sob a forma de
sinal pode ser perdida se o sinal é recebido num momento onde o
tratamento para esse tipo de sinal é simplesmente ignorá-lo. Após a
captura de um sinal por um processo, esse processo vai readotar seu
comportamento par défaut em relação a esse sinal. Assim, no
caso de se desejar captar um mesmo sinal várias vezes, é conveniente
fazer a redefinição do comportamento do processo pela primitiva
signal(). Geralmente, a interceptação do sinal deve ser
rearmada o mais cedo possível (deve ser a primeira instrução efetuada
no procedimento de desvio para tratamento do sinal).
Um outro problema é que os sinais têm um comportamento um
excessivamente abrupto em relação à execução do programa: na sua
chegada, eles vão interromper o trabalho em curso. Por exemplo, a
recepção de um sinal enquanto o processo espera um evento (algo que
pode acontecer durante a utilização das primitivas open(),
read(), write(), pause(), wait(),...), laça a execução imediata da
rotina de desvio; em seu retorno, a primitiva interrompida reenvia uma
mensagem de erro, mesmo sem ser totalmente completada (errno é
posicionado em EINTR). Por exemplo, quando um processo pai
que intercepta os sinais de interrupção e de abandono está em espera
da terminação de um filho, é possível que um sinal de interrupção ou
de abandono tire o pai da espera no wait() antes que o filho tenha
terminado sua execução. Neste caso, um processo <defuntc>
será criado. Uma forma de contornar esse problema é ignorar certos
sinais antes da chamadas de tais primitivas (levando irremediavelment
a outros problemas, uma vez que esses sinais não serão tratados de
forma alguma).
Next: Lista de Sinais em
Up: Os sinais
Previous: Controle da progressão de
Celso Alberto Saibel Santos
2000-11-14