Script de shell que inicia um processo, inicia outro processo e mata o primeiro processo

3

Vamos imaginar que eu tenha um client e um server na mesma máquina, e gostaria de roteirizar algumas interações entre eles.

Eu realmente gostaria de um script de shell para -

  1. Iniciar server
  2. Coloque server no plano de fundo
  3. Iniciar client
  4. (aguarde que client faça o que fizer)
  5. Parar server

Eu já posso fazer quase isso,

./server &
./client

Mas isso deixa server em execução após o script terminar, o que, além de qualquer outra coisa, é muito desordenado.

O que posso fazer?

    
por Jez 15.07.2011 / 17:51

2 respostas

5

Você pode usar o controle de trabalho bash:

#!/bin/bash

./server &
./client
kill %1

Certifique-se de colocar o #!/bin/bash no início do script para que o bash seja usado para executar o script (não tenho certeza se o controle de trabalho é suportado no sh, por favor me corrija).

    
por 15.07.2011 / 17:53
2

Você pode obter o mesmo resultado com o padrão POSIX sh. Em sh, quando você gera um processo em segundo plano usando '&', o PID do processo é armazenado na variável especial $ !. Então:

#!/bin/sh
./server &
./client
kill $!

Para situações mais complexas, talvez você queira salvar o pid:

#!/bin/sh
./server &
serverpid=$!
# ... lots of other stuff
kill $serverpid
    
por 30.01.2013 / 12:07