Почему время bash более точное, чем время GNU?

12

Команда buitin bash timeдает точность выполнения в миллисекундах, а GNU time(обычно / usr / bin / time) дает точность в несколько секунд. times(2)Системный вызов дает раз в часах, и 100 часов = 1 секунда (обычно), так что точность, как GNU time. Итак, вопрос в том, что использует bash, timeчтобы он был более точным?

Лукаш Сова
источник
Ммм ... они оба дают миллисекунды на моей системе ... (FC16)
Nico
Странный. Что дает вам printf ("% d \ n", sysconf (_SC_CLK_TCK)); должно быть 100, как я уже говорил выше. У кого-то есть наблюдения, подобные моим: dirac.org/linux/time, но объяснений нет.
Лукаш Сова
да, в действительности это дает 100 ...
Нико
Тогда я понятия не имею, почему это так. Предполагается, что время GNU использует времена syscall, которые используют sysconf (_SC_CLK_TCK) для преобразования в секунды.
Лукаш Сова
FWIW Когда вы говорите «bash time», я предполагаю, что вы имеете в виду BSD, timeкоторый использует getrusage.
Деннис

Ответы:

16

После некоторого изучения хардкорного кода bash я обнаружил, что bash timeиспользует getrusage()и timeиспользует GNU times(). getrusage()гораздо точнее из-за микросекундного разрешения.

Лукаш Сова
источник