Descobre se um processo termina num período de tempo específico

1

Estou executando um programa. Dentro deste programa eu executo um comando específico e eu uso o comando ulimit para finalizar a execução desse comando se ele exceder um período de tempo. Para ser mais claro, executo isso:

ulimit -t 1800 ./bsolo3.0.17 test.opb

que significa que eu quero terminar a execução do bsolo solver se o tempo necessário exceder 1800 segundos.

O que eu quero é uma maneira de saber, depois digamos 10 execuções desse comando, quantas vezes o tempo de execução ficou abaixo desse limite e quantas vezes o tempo de execução desse comando estava acima desse limite. Eu não tenho nenhum pista ainda.Quaisquer dicas?

    
por Dchris 13.07.2013 / 15:07

1 resposta

2

Pelo menos no meu sistema (Debian), não é assim que ulimit funciona. Ele não executará o comando após o limite, você apenas define o limite e executa o comando:

$ ulimit -t 1800 
$ ./bsolo3.0.17 test.opb

De qualquer forma, para saber os horários, você pode usar time :

$ time ls > /dev/null
real    0m0.004s
user    0m0.000s
sys     0m0.000s

Então, se o seu comando está rodando em algum tipo de loop, você pode capturar os tempos em um arquivo como este:

ulimit -t 1800
for i in {1..10}; do
  (time ./bsolo3.0.17 test.opb) 2>> times.log 
done  

O subshell (os parênteses) é necessário para poder capturar a saída de time que imprime em STDERR. Usar time foo 2> log não funcionará porque isso só redirecionará o STDERR do comando foo e não de time .

Se tudo o que você quer é o número de vezes que o comando terminou dentro do tempo alocado, faça o seguinte:

 ulimit -t 1800
for i in {1..10}; do
  ./bsolo3.0.17 test.opb && let count++
done  
echo "Job finished in time $count times."
    
por 13.07.2013 / 15:25