ฉันมีความคิดที่จะเปรียบเทียบโปรแกรมบีบอัดข้อมูลอย่างรวดเร็ว เช่นสำหรับ 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
วิธีนี้ใช้ได้ผล แต่ใช้เวลา cpu เท่านั้นดังนั้นการชะลอตัวเนื่องจาก I / O (เช่นเนื่องจากการบีบอัดยิ่งแย่ลงและจำเป็นต้องอ่านไบต์เพิ่มเติมจากดิสก์)การสร้างไฟล์ทดสอบขนาดเล็ก:
ก็สามารถใช้งานได้แน่นอนและอาจเป็นทางออกที่ดีที่สุด อย่างไรก็ตามสิ่งนี้จะสร้างไฟล์ชั่วคราวจำนวนมาก