Как говорили другие люди, вы не можете сделать это с помощью стандартных встроенных команд Bash.
Можно создать собственную команду, чтобы ограничить истекшее время для команды (отличное от фактическогоВремя процессора, используемое командой; см. Также комментарии от Rob , за что, спасибо!).Ранее я публиковал на SO код тайм-ауты после целого числа прошедших секунд (поэтому это не является прямым ответом на вашу проблему).Тем не менее, вы могли бы (довольно) легко адаптировать код для использования разрешения менее секунды на истекшее время и возможности POSIX.Основной интерфейс:
timeout -t time [-s signal] cmd [args ...]
Чтобы удовлетворить ваши требования, ему просто нужно будет распознать подсекунду и вызвать соответствующие функции;это влияет на внутренние органы гораздо больше, чем на внешние.
Теоретически (согласно POSIX 2008) вы должны использовать timer_create()
, timer_settime()
и timer_gettime()
функции.Они предоставляют подробный контроль над тем, какой сигнал должен генерироваться по истечении времени таймера и т. Д. Однако не все системы предоставляют их (например, MacOS X 10.6.7 не документирует их).Они используют заголовки <time.h>
и <signal.h>
, а также struct itimerspec
(и struct sigevent
).
Однако в краткосрочной перспективе вам может понадобиться использовать функции getitimer()
и setitimer()
вместо этого, который POSIX 2008 помечает как устаревший (но который доступен в MacOS X 10.6.7).В них используются заголовки <sys/time.h>
и struct itimerval
.
. Для переносимости может потребоваться автоматическая настройка программы, чтобы справиться с обоими из них;Вам также может понадобиться иметь дело с Windows (которая, несомненно, предоставит альтернативный интерфейс).Вы, вероятно, прибегаете к alarm()
и временной дискретизации с точностью до секунды, если ни одна из систем таймера сигнализации с высоким разрешением не доступна.Выберите функции timer_*
вместо функций *itimer
, если они присутствуют, или сначала просто проверьте timer_*
и используйте их, если они доступны.
Имейте в виду, что если вы установите тайм-аут на 0,5 секунды с этимифункции, они гарантируют, что минимальное время составляет 0,5 секунды, но оно может быть произвольно больше времени из-за проблем с расписанием.Обратите внимание, что есть timer_getoverrun()
, чтобы помочь определить, как долго было превышение.