• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zecapistolas

Shell Script: Esperar X tempo para que uma tarefa seja executada

7 mensagens neste tópico

Boas, dario1133 espero que não te importes de utilizar este tópico para colocar uma dúvida  ;),

EDIT: Separei os dois tópicos porque não tinham nada que ver um com o outro; só a linguagem.

Preciso de verificar que se um comando executado pela minha shell-script demora 10 segundos! É que se demorar 10 segundos preciso que ele faça uma coisa, se demorar menos preciso que faça outra....

Como posso fazer isso?!

cumps  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o comando chama-se time

man time

por exemplo

p@p-laptop:~$ time curl -I http://portugal-a-programar.org
HTTP/1.1 302 Moved Temporarily
Date: Wed, 18 Nov 2009 23:32:31 GMT
Server: Apache
X-Powered-By: PHP/5.2.11
Location: http://www.portugal-a-programar.org/forum/index.php
Content-Type: text/html


real	0m0.723s
user	0m0.012s
sys	0m0.004s

As últimas três linhas é para onde deves olhar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o comando chama-se time

Percebi a ideia, mas não sei utilizar....  :-[

O comando que tenho é o seguinte "java Client1 0.0.0.0 5000 update Alice A102" e 5000 é uma porta inválida para comunicar com o Servidor e como o Cliente não faz testes de fiabilidade, fica eternamente à espera do Servidor.... Eu queria testar se demorar pelo menos 10s eu terminava essa parte à "bruta".....  ;)

cumps  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah ok, não tinha percebido bem, o time só dá um resumo do tempo de execução.

Nesse caso tens que correr o teu comando num processo separado daquele em que controlas o tempo. Sendo o motivo a impossibilidade de executares um comando enquanto o anterior não acabar.

Mas isso é possível! Já é uma coisa em que tenho pouca prática :s. A sintaxe de shellscript não é propriamente uma coisa fácil de se lembrar. Mas tens aqui um exemplo bastante elucidativo:

http://forums13.itrc.hp.com/service/forums/questionanswer.do?admit=109447627+1258587963462+28353475&threadId=659022

O & a seguir a um comando corre-o noutro processo. Aparentemente o PID é devolvido e por conseguinte guardado na variável $!. Então só tens que esperar o tempo que presares (sleep) e matar o processo com o kill.

O nosso wiki já tem dois artigos sobre shellscript. Vale a pena uma leitura:

http://wiki.portugal-a-programar.pt/revistaprogramar_arquivo:12_edicao:shell_script

http://wiki.portugal-a-programar.pt/sistemas_operativos:linux:shell_script:intro

Se te safares pedia o favor de afixares o snipet no wiki.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ó exacto, mando o processo para background e depois espero o tempo que quiser.... Não sei escrever na Wiki  :-[ mas vou deixar aqui o fiz....

java Client1 0.0.0.0 5000 update Alice A102 &
# Aguarda 10 segundos
sleep 10
# Localiza o PID do processo java
pid=$(pgrep java)
# Kill desse processo
kill $pid

cumps e obrigado pela dica....  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nessa versão se tiveres mais do que um processo Java a correr, o pgrep vai devolver mais do que um PID, ou seja, matarias todos os processos java.

É melhor usares a variável $! como o pedrotuga disse, pois devolve apenas o PID do último processo iniciado por esse script.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nessa versão se tiveres mais do que um processo Java a correr, o pgrep vai devolver mais do que um PID, ou seja, matarias todos os processos java.

É melhor usares a variável $! como o pedrotuga disse, pois devolve apenas o PID do último processo iniciado por esse script.

Por acaso, calhou bem porque quando o script chega a esse ponto tanto faz que mata um como dois processos.... Mas, fica a dica, obrigado....

cumps  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora