comando em background no script [RESOLVIDO]

1. comando em background no script [RESOLVIDO]

Diana Moura Vasconcelos
dianase

(usa Outra)

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.


  


2. MELHOR RESPOSTA

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


3. nohup?

Perfil removido
removido

(usa Nenhuma)

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

veja isso:

www.vivaolinux.com.br/dica/O-comando-nohup

e leia a manpage:

$ man nohup

e +

linux.101hacks.com/unix/nohup-command/
linux.die.net/man/1/nohup
www.uniriotec.br/~morganna/guia/nohup.html


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

Pedro
px

(usa Debian)

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]

Diana Moura Vasconcelos
dianase

(usa Outra)

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]

Paulo
paulo1205

(usa Ubuntu)

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

E qual é o tal comando?


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

Diana Moura Vasconcelos
dianase

(usa Outra)

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

paulo1205 escreveu:

E qual é o tal comando?


emcast http://www.jonstill.com/2011/01/11/testing-multicast/


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

Paulo
paulo1205

(usa Ubuntu)

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.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts