next up previous
Next: Lista de Sinais em Up: Os sinais Previous: Controle da progressão de

Conclusão

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 up previous
Next: Lista de Sinais em Up: Os sinais Previous: Controle da progressão de
Celso Alberto Saibel Santos 2000-11-14