Kill processo depois de ter sido autorizado a executar por algum tempo

11

Eu quero limitar o tempo em que um comando grep process pode ser executado ou estar ativo.

Por exemplo. Eu quero fazer o seguinte:

grep -qsRw -m1 "parameter" /var

Mas antes de executar o comando grep , quero limitar por quanto tempo o processo grep deve durar, digamos, não mais que 30 segundos.

Como faço isso?

E, se puder, como retornar ou redefinir para não ter limite de tempo depois?

    
por yael 17.06.2010 / 17:24

3 respostas

10

Você pode usar timelimit , ele está disponível no Ubuntu padrão ou você mesmo pode compilá-lo.

timelimit executa um comando e finaliza o processo gerado após um determinado tempo com um determinado sinal. Um sinal de "aviso" é enviado primeiro e, depois de um tempo limite, um sinal de "kill", semelhante ao modo como o init (8) opera no desligamento.

    
por 19.06.2010 / 06:12
6

Aqui está um pequeno golpe para isso:

grep -qsRw -m1 "parameter" /var &

GREPPID=$!

( sleep 30; kill $GREPPID ) &

fg $GREPPID

Basicamente, ele inicia a pesquisa em segundo plano, depois inicia um subshell que aguarda 30 segundos e depois mata o processo de pesquisa. Se a pesquisa levar < 30s, o processo já estará morto. Não é uma ótima idéia matar um processo que já está morto, já que há uma chance muito pequena de que alguma outra coisa irá reutilizar o pid, mas para algo assim, geralmente está tudo bem. Por fim, a pesquisa é colocada em primeiro plano e será executada até que seja concluída ou seja eliminada.

    
por 17.06.2010 / 17:25
3

Crie um novo arquivo chamado "tgrep" e coloque o seguinte (ou chame como quiser):

#!/bin/bash
grep $@ &
PID=$!
sleep 30 && kill $PID 2>/dev/null &
wait $PID
exit 0

Em seguida, execute chmod a+x tgrep . Agora, se você quiser usá-lo, você pode digitar

./tgrep -i "results" /home/dan/*txt

Ou você pode apenas usá-lo como tgrep (sem o ./ e ser capaz de usá-lo de qualquer diretório) se você colocá-lo em um diretório contido em sua variável $ PATH (como / home / dan / bin /, se que está na sua variável $ PATH, caso contrário você pode adicioná-lo).

    
por 17.06.2010 / 18:08