Pular para o conteúdo

comando em background no script [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar

1. comando em background no script [RESOLVIDO]

Enviado em 03/05/2013 - 08:23h

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.

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.

Responder tópico

2. Re: comando em background no script [RESOLVIDO]

Melhor resposta

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 $!

4. Re: comando em background no script [RESOLVIDO]

Enviado em 03/05/2013 - 09:04h

bom ñ sei se vai ajudar mas, estou fazendo um timer aq pra desligar meu pc num certo tempo em segundos ai, vc faz suas modificações nas funções e coloca oq vc quer rodar, se ñ souber me explica exatamente oq tu quer q nos montamos o script aq :)

timer:

#!/bin/bash

TEMPO() {
clear
echo ""
echo " Quantos segundos para desligar? "
echo ""
read time
CONTAR
}

CONTAR() {
clear
echo "----------------------------- "
date
echo "----------------------------- "
echo ""
echo " Desligando em $time segundos ... "
echo ""
sleep $time;

clear
echo " Desligando em 3 segundos "
sleep 1
clear
echo " Desligando em 2 segundos "
sleep 1
clear
echo " Desligando em 1 segundos "
clear
echo " Até + "
sleep 1
DESLIGA
}

DESLIGA() {
shutdown now;
exit

}

TEMPO

5. Re: comando em background no script [RESOLVIDO]

Enviado em 03/05/2013 - 09:46h

paulo1205 escreveu:
[...]
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 $!
Oi Paulo, é realmente simples assim mesmo... Descobri que o problema é com o comando que estou tentando executar... Ele não roda corretamente quando coloco em background...
Mas valeu, obrigada tbm ao edps e px.

6. Re: comando em background no script [RESOLVIDO]

Enviado em 03/05/2013 - 09:50h

E qual é o tal comando?

8. Re: comando em background no script [RESOLVIDO]

Enviado em 03/05/2013 - 10:44h

Nesse link há vários comandos de teste de multicast. Não tenho como saber qualquer deles você usou nem como o fez. (E, para piorar, em nenhuma das redes a que tenho acesso hoje eu tenho como brincar com multicast.)

Em geral, comandos que precisam de interação com o terminal são os que se comportam pior quando se tenta fazer com que executem em background, especialmente se houver operações de leitura envolvidas. Se esse for o caso, você poderia tentar forçar a alocação de um pseudo-terminal para a tal aplicação.

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder