Comando Bash Run por um certo tempo?

11

Estou fazendo um script bash para meu uso. Como posso executar um comando por um certo tempo, como 20 segundo e terminar o comando? Eu tentei muitas soluções, mas nada funciona, eu também tentei o comando timeout sem sucesso. Por favor me dê alguma solução para isso.

por exemplo: Eu quero executar este comando no script e terminal após 10 seg

some command
    
por Umair Riaz 08.05.2013 / 12:34

3 respostas

13

Hm, isso deve fazer o truque:

xmessage "Hello World" &
pidsave=$!
sleep 10; kill $pidsave

xmessage fornece um caso de teste rápido aqui (no seu caso o comando airodump deve ir lá); & coloca em segundo plano.

$! detém o PID do último processo iniciado (consulte, por exemplo, link ); o PID é salvo na variável pidsave .

Após alguma espera ( sleep ), envie um sinal TERM para o processo.

    
por 08.05.2013 / 13:29
4

No prompt do bash, você pode usar "

  • your_command & sleep 20; kill $!
  • Ou use o comando de tempo limite: por exemplo aptget install timeout e timeout -k 3m 14s your_command
  • Ou use expect conforme explicado aqui: link
  • ou faça isso com perl: perl -e "alarm 10; exec @ARGV" "Your_command"
  • Ou use esta solução mais enigmática: $COMMAND 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID ( Fonte e explicação )
por 24.10.2013 / 20:15
1

Outra maneira é usar pgrep $ pattern ou pkill $ pattern; retorna todos os PIDs que correspondem ao padrão especificado, observando todos os processos em execução na máquina. Portanto, para limitar o escopo dos PIDs apenas aos que você possui, use: pgrep -P $ mypid $ pattern, ou pkill -P $ mypid $ padrão

Então, para executar um processo em segundo plano por um período definido, seu script seria parecido com este:

#!/bin/bash 
mypid=$$
run_something &
sleep $time_in_seconds
pkill -P $mypid something

Tenha em mente que isso eliminará todos os processos com o mesmo padrão de nome em execução no PID pai atual. Então você pode usar isso para iniciar vários processos e matá-los todos simultaneamente após um certo tempo.

    
por 02.06.2018 / 00:44