gnu coreutils timeout.c tem um fallback para sistemas sem timer_settime () - ele irá reverter para resolução de um único segundo:
/* timer_settime() provides potentially nanosecond resolution.
setitimer() is more portable (to Darwin for example),
but only provides microsecond resolution and thus is
a little more awkward to use with timespecs, as well as being
deprecated by POSIX. Instead we fallback to single second
resolution provided by alarm(). */
talvez seja esse o seu problema. Eu não corro ubuntu para que eu não posso verificar em primeira mão, mas por exemplo minha máquina openbsd só tem setitimer (), por isso só usaria timeouts full-segundo para mim
- editar: no segundo olhar ainda deve esperar pelo menos 1 segundo, a menos que seu arredondamento para baixo ... ou de alguma forma tcpdump está recebendo um sigterm cedo ... e talvez não haja apenas pacotes durante o intervalo?