Saya punya ide untuk segera membandingkan beberapa program dekompresi. Misalnya untuk gz, saya akan menjalankan perintah:
timeout 10 zcat foo.gz | wc -c
Yang akan mengukur jumlah data yang dapat diekstrak oleh decompressor dalam 10 detik.
Satu-satunya masalah adalah, itu tidak berfungsi: karena zcat terbunuh, wc juga terbunuh, jadi saya tidak mendapatkan jumlah byte, hanya Terminated
pesan.
Jadi, pertanyaannya adalah: apakah ada cara untuk mendapatkan hitungan dari wc , baik dengan memblokir sinyal entah bagaimana, atau menggunakan alternatif alih-alih wc yang mencetak hasil bahkan ketika mendapat sinyal istilah.
Tentu saja, ada alternatif:
Menulis ke file sementara:
timeout 10 zcat foo.gz > /dev/shm/x ; du -sb /dev/shm/x ; rm -r /dev/shm/x
Masalahnya adalah ini menggunakan banyak memori, dan mungkin juga memiliki beberapa penalti kinerja.Sebagai gantinya menggunakan ulimit:
ulimit -t 10; zcat foo.gz | wc -c
Ini juga berfungsi, tetapi hanya mengukur waktu cpu, jadi pelambatan karena I / O (misalnya karena kompresi lebih buruk, dan lebih banyak byte perlu dibaca dari disk) tidak diukur.Membuat file tes yang lebih kecil:
Ya, ini bisa bekerja tentu saja, dan mungkin solusi terbaik. Namun, ini menciptakan banyak file sementara.
Jawaban:
Anda dapat menempatkan perintah batas waktu dalam subkulit dan membuatnya berhasil:
sumber
(timeout 10 <command> || :) | wc -c
Tepat setelah memposting, saya berpikir untuk menggunakan pipa bernama untuk proses:
Ini sepertinya berhasil.
sumber