Miałem pomysł, aby szybko przeprowadzić testy porównawcze niektórych programów dekompresyjnych. Np. Dla gz uruchomiłbym polecenie:
timeout 10 zcat foo.gz | wc -c
Który mierzyłby ilość danych, które dekompresor mógłby wyodrębnić w ciągu 10 sekund.
Jedynym problemem jest to, że nie działa: ponieważ Zcat jest zabijany, wc również jest zabijany, więc nie otrzymuję liczby bajtów, tylko Terminated
wiadomość.
Pytanie brzmi zatem: czy istnieje sposób, aby uzyskać licznik z wc , albo blokując sygnał, albo użyj alternatywy zamiast wc, która wyświetla wynik, nawet gdy otrzyma sygnał terminu.
Oczywiście istnieją alternatywy:
Zapis do pliku tymczasowego:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
Problem polega na tym, że zużywa dużo pamięci, a także może mieć negatywny wpływ na wydajność.Zamiast tego używa się ulimit:
ulimit -t 10; zcat foo.gz | wc -c
Działa to również, ale mierzy tylko czas procesora, więc spowolnienie z powodu operacji we / wy (np. Ponieważ kompresja jest gorsza i więcej bajtów musi zostać odczytanych z dysku) nie jest mierzone.Tworzenie mniejszych plików testowych:
Cóż, to może oczywiście działać i może być najmilszym rozwiązaniem. Tworzy to jednak wiele plików tymczasowych.