Fórum Ubuntu Linux - PT

Suporte Técnico => Programação e Scripts => Tópico iniciado por: Mr_John em 10 de Maio de 2010, 17:50

Título: Sistemas Operativos - Programação
Enviado por: Mr_John em 10 de Maio de 2010, 17:50
É 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?
Título: Re: Sistemas Operativos - Programação
Enviado por: Darcamo em 10 de Maio de 2010, 19:50
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.
Título: Re: Sistemas Operativos - Programação
Enviado por: fabio2paolini em 11 de Maio de 2010, 10:45
O comando que captura o ctrl^C é o "trap"
Código: [Selecionar]
trap <comando a ser executado> 2O número dois acima diz que o sinal a ser capturado é o do ctrl^C
Você pode criar uma função dessa forma
Código: [Selecionar]
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
Código: [Selecionar]
trap -l na linha de comando mesmo.