"Como faço para executar um comando e abortar (timeout) após N segundos?", BASH FAQ entry # 68 .
Eu tenho uma atribuição da Uni que estou construindo e preciso executar várias vezes com vários parâmetros diferentes para verificar os tempos de execução. No momento eu tenho um script bash simples que parece um pouco com o abaixo - ele registra o que está fazendo e os resultados time
para cada teste, toda a saída normal é descartada (estou verificando correção em outro lugar, não se preocupe ).
O problema é que às vezes (e é bastante raro) o master
processa preso e nunca termina, o que obviamente fica no caminho de terminar o teste. Estou trabalhando para consertar esse problema, obviamente, mas o algoritmo está bem, então eu ainda gostaria de continuar com os testes, já que há uma data de entrega aproximada.
Então, eu gostaria de alguma maneira de especificar o tempo máximo de execução dos processos, e se eles excederem que eu quero que eles terminem automaticamente (de preferência por SIGINT
, ou algum outro sinal identificado) e então o script continue com a próxima entrada. Ou qualquer alternativa adequada que tenha o mesmo tipo de resultado.
Sugestões?
Snippet do que tenho no momento:
#!/bin/bash
echo "starting tests: clearing output file" > log
echo "running single tests" >> log
echo " starting 16" >> log
time (./single 16) 1> /dev/null 2>> log
time (./single 16) 1> /dev/null 2>> log
time (./single 16) 1> /dev/null 2>> log
#etc
echo "running multi tests" >> log
echo " starting 16 1 1 1" >> log
time (./master 16 4 7 100) 1> /dev/null 2>> log
time (./master 16 4 7 100) 1> /dev/null 2>> log
time (./master 16 4 7 100) 1> /dev/null 2>> log
#etc
"Como faço para executar um comando e abortar (timeout) após N segundos?", BASH FAQ entry # 68 .