Sistemas Operativos - Programação

Iniciado por Mr_John, 10 de Maio de 2010, 17:50

tópico anterior - próximo tópico

Mr_John

É assim pessoal, estou a fazer um programa que funcione como um chat numa cadeira de Sistemas Operativos.
Estou a utilizar uma Fila de Mensagens.
O programa ja ta feito, e consiste em ter um programa que é o servidor e outro como cliente. o cliente manda pedidos ao servidor e o servidor responde, e assim sucessivamente.
A questão é a seguinte, gostava de aquando do termino do processo do programa do servidor, através do Ctrl^C, também terminar o processo do programa cliente. Como o posso fazer?

Darcamo

Não entendo bem dessa parte, mas pelo que sei quando você faz o Ctrl^C você manda o sinal SIGINT (eu acho) para o programa. Como esse sinal não é capturado a ação padrão, que é terminar o programa, é efetuada. Procura no google como capturar esse sinal. Assim você pode capturar o sinal, enviar a uma mensagem para o cliente dizendo que ele deve sair, e então sair do servidor.

fabio2paolini

O comando que captura o ctrl^C é o "trap"
trap <comando a ser executado> 2
O número dois acima diz que o sinal a ser capturado é o do ctrl^C
Você pode criar uma função dessa forma
delete_all() {
kill -9 id_proc_cliente1
kill -9 id_proc_cliente2
..............
}

e substituir no "<comando a ser executado>"
Neste caso você precisaria saber o pid dos clientes.
Um link onde há uma explicação sobre o trap segue abaixo:
http://www.freeos.com/guides/lsst/ch04sec12.html
Mais informações no "man bash" e faça uma busca para o trap.
Para uma lista completa dos sinais capturados pelo trap, execute trap -l na linha de comando mesmo.