2014-09-19 6 views
1

Я хочу многократно запускать программу максимум на 5 секунд.Как сохранить программу в течение периода времени?

Я знаю, что timeout выполняет команду для времени, указанного, например:

timeout 5 ./a.out 

Но я хочу продолжать выполнение программы, пока не прошло 5 секунд, так что я могу сказать, как много раз это было казнены.

я понял, что мне нужно что-то вроде этого:

timeout 5 `while true; do ./a.out; done` 

, но это не работает. Я уже пытался создать сценарий оболочки, который вычисляет истекшее время каждой итерации цикла и вычитает его со времени начала, , но это неэффективно.

Любая помощь будет оценена по достоинству.

+2

ли вы попробовать 'таймаут 5 Баш -c«, а правда, делать ./a. out "done" –

+0

Если вы хотите использовать 'timeout', команда' timeout 5s./a.out' –

+0

Да, я узнал, что bash -c "" сделает это! Спасибо за совет :) –

ответ

0

Если вы хотите использовать тайм-аут:

timeout 5s ./a.out 

Вы можете написать короткий сценарий и легко установить end time с date -d "date string" +%s, чтобы получить будущее время в секундах. Затем просто сравните current time с end time и перерыв на true. Это позволяет вам захватывать дополнительные данные за время выполнения. Например, следующий код устанавливает время окончания 5 seconds в будущем, а затем цикл до current time равен end.

#!/bin/bash 

end=$(date -d "+ 5 seconds" +%s)  # set end time with "+ 5 seconds" 
declare -i count=0 

while [ $(date +%s) -lt $end ]; do  # compare current time to end until true 
    ((count++)) 
    printf "working... %s\n" "$count" # do stuff 
    sleep .5 
done 

выход:

$ bash timeexec.sh 
working... 1 
working... 2 
working... 3 
working... 4 
working... 5 
working... 6 
working... 7 
working... 8 
working... 9 

В вашем случае вы могли бы сделать что-то вроде

./a.out &        # start your application in background 
apid=$(pidof a.out)      # save PID of a.out 

while [ $(date +%s) -lt $end ]; do 
    # do stuff, count, etc. 
    sleep .5       # something to prevent continual looping 
done 

kill $apid        # kill process after time test true 
Смежные вопросы