paulo1205
(usa Ubuntu)
Enviado em 03/05/2013 - 09:27h
dianase escreveu:
Pessoal,
Sou iniciante em Linux, em shell script então...
Estou com um problema que pode ser simples, mas não consigo resolver.
Vou explicar com um script genérico:
#!/bin/bash
comando &
echo 1
A minha ideia é rodar o "comando" em background e enquanto isso, executar o echo. O problema é que quando rodo o script, primeiro ele executa o "echo" e depois o "comando". Não entendo porque isso acontece.
Quando você põe o comando em background, é como se você tivesse dois programas executando ao mesmo tempo. Não é que o "echo" execute antes, mas ele executa mais rapidamente do que o outro comando, que estava correndo ao lado dele. Provavelmente isso vai acontecer se o tal comando for mesmo mais complexo ou requerera execução de comandos externos (lembrando que, no bash, "echo" é um comando interno do shell).
Minha necessidade real: meu script vai rodar um comando "infinito" tipo um ping, por exemplo, logo queria rodá-lo em background (ping &), pra depois pegar o PID (PID=$!) dele e após um tempo (sleep x), matar o processo (kill $PID) para que o script possa finalizar. Há alguma forma de fazer isso?
Obrigada.
Sim, há. E é quase que uma tradução direta para comandos do que você falou em Português. Veja só.
#!/bin/bash
ping 10.20.30.40 &
sleep 10
kill $!