Escreva um programa, em C, que ao ser executado ele apenas instala um conjunto de tratadores de sinais e aguarda sinais.
O seu programa deve ser capaz de tratar os seguintes sinais: SIGTERM, SIGUSR1, SIGUSR2 e SIGINT.
Sempre que receber um sinal o seu programa deve imprimir na tela Recebi XX, sendo XX o código do sinal, por exemplo: Quando receber o sinal SIGTERM deverá imprimir Recebi 15.
Lembre que a função instalada para receber o sinal recebe como argumento o código do sinal. Veja o manual da função signal para lembrar de mais detalhes.
Se o seu programa receber 3 sinais na seguinte ordem: SIGINT, SIGUSR2, SIGTERM ele deverá imprimir na tela Senha acionada e se o processo receber, então SIGUSR1 ele deverá encerrar sua execução com a mensagem Tchau, tendo como exit status o valor 0. Se depois de “acionar” a senha, o processo receber um sinal diferente de SIGUSR1, o acionamento deverá ser desfeito silenciosamente.
Ou seja se o seu processo receber sinais em qualquer ordem nada deverá acionado. Se ele receber SIGINT e depois SIGUSR2 e então qualquer sinal diferente de SIGTERM a senha não pode ser destravada.
A única maneira de encerrar a execução do processo é se ele receber sinais na seguinte ordem: SIGINT SIGUSR2 SIGTERM SIGUSR1
Não há entrada.
Se o seu processo receber os sinais na seguinte ordem:
SIGINT
SIGINT
SIGUSR1
SIGINT
SIGUSR2
SIGTERM
SIGUSR1
O seu programa deverá ter a sequência de impressão:
Recebi 2
Recebi 2
Recebi 10
Recebi 2
Recebi 12
Recebi 15
Senha acionada
Recebi 10
Tchau
Se o seu processo receber os sinais na seguinte ordem:
SIGUSR1
SIGUSR1
SIGINT
SIGUSR2
SIGTERM
SIGTERM
SIGUSR1
SIGINT
SIGUSR2
SIGTERM
SIGUSR1
O seu programa deverá ter a sequência de impressão:
Recebi 10
Recebi 10
Recebi 2
Recebi 12
Recebi 15
Senha acionada
Recebi 15
Recebi 10
Recebi 2
Recebi 12
Recebi 15
Senha acionada
Recebi 10
Tchau
Ordem de sinais:
SIGUSR1
SIGTERM
SIGUSR1
SIGTERM
SIGINT
SIGUSR2
SIGTERM
SIGTERM
SIGTERM
SIGTERM
SIGINT
SIGTERM
SIGUSR2
SIGUSR1
SIGINT
SIGINT
SIGUSR2
SIGTERM
SIGUSR1
Saída do seu programa:
Recebi 10
Recebi 15
Recebi 10
Recebi 15
Recebi 2
Recebi 12
Recebi 15
Senha acionada
Recebi 15
Recebi 15
Recebi 15
Recebi 2
Recebi 15
Recebi 12
Recebi 10
Recebi 2
Recebi 2
Recebi 12
Recebi 15
Senha acionada
Recebi 10
Tchau