Autor Tópico: Sistemas Operativos - Programação  (Lida 1602 vezes)

Offline Mr_John

  • Usuário Ubuntu
  • *
  • Mensagens: 1
    • Ver perfil
Sistemas Operativos - Programação
« Online: 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?

Darcamo

  • Visitante
Re: Sistemas Operativos - Programação
« Resposta #1 Online: 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.

Offline fabio2paolini

  • Usuário Ubuntu
  • *
  • Mensagens: 125
    • Ver perfil
Re: Sistemas Operativos - Programação
« Resposta #2 Online: 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.