У меня была идея быстро сравнить некоторые программы декомпрессии. Например, для gz я бы запустил команду:
timeout 10 zcat foo.gz | wc -c
Который будет измерять количество данных, которые декомпрессор может извлечь за 10 секунд.
Единственная проблема заключается в том, что он не работает: поскольку zcat уничтожен, wc также уничтожен, поэтому я не получаю счетчик байтов, просто Terminated
сообщение.
Итак, вопрос заключается в следующем: есть ли способ получить счет от wc , либо заблокировав сигнал, либо использовать альтернативу вместо wc, которая печатает результат, даже когда он получает термин-сигнал.
Конечно, есть альтернативы:
Запись во временный файл:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
проблема в том, что он использует много памяти, а также может иметь некоторое снижение производительности.Вместо этого используется ulimit:
ulimit -t 10; zcat foo.gz | wc -c
это также работает, но измеряет только время процессора, поэтому замедление из-за операций ввода-вывода (например, из-за того, что сжатие хуже и нужно читать больше байтов с диска) не измеряется.Создание меньших тестовых файлов:
ну, это может сработать, конечно, и может быть самым хорошим решением. Тем не менее, это создает много временных файлов.
Ответы:
Вы можете поместить команду timeout в подоболочку и сделать ее успешной:
источник
(timeout 10 <command> || :) | wc -c
Сразу после публикации у меня появилась мысль использовать именованные каналы для процесса:
Это похоже на работу.
источник