Força um script bash a ser executado até a conclusão, onde alguns itens podem ficar

3

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
    
por DMA57361 12.11.2010 / 20:51

1 resposta

5

"Como faço para executar um comando e abortar (timeout) após N segundos?", BASH FAQ entry # 68 .

    
por 12.11.2010 / 21:08

Tags